使用java 的spring框架我们不再需要使用new对象,而是通过
来获取对象。
今天笔者了解了下java的反射,对spring的有了一个全新的认识。

先来说下反射的核心思想
将一个类的各个成员映射成相应的Java类型

java spring 解析反射

例如图中的成员有 包 构造器 属性字段 普通方法 而反射即是把需要的转化成相应的java类型 。可以依靠反射来换取相应的成员,下面的例子通过反射来创建一个对象。

创建了一个很基础的类

public class father {
	public String fathername="fathername";
	public father() {
	}
	public father(String fathername) {
		this.fathername = fathername;
	}
	public void father() {
		System.out.print("father");
	}
}

1.正常的创建对象

public class main {
	public static void main(String[] args) {
		father father=new father();
        System.out.print(father.fathername);
	}
}

这种方法相信应该所有人都看的懂,就是依靠new来创建对象
测试,返回结果


fathername


2.通过反射来创建对象(不使用spring框架的bean)


public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		Class getclass = Class.forName("全类名");//不能写class     //1
		Constructor constructor=getclass.getConstructor();      //2
		//Constructor constructor=getclass.getConstructor(String.class);
		father father=(father)constructor.newInstance();       //3
		father father=(father)constructor.newInstance("name");   
		System.out.print(fahter.fathername);     //4
	}

这里来详细的解释下
我们都知道,java依靠JVM解析java类文件是先将.java转化为.class ,而这里的.class就是字节码文件。(如果对字节码是什么不了解,请先百度一下)

1.代码中的第一行(标注1的地方)即是获取字节码文件。获取字节码文件的方法有很多种,可以自行百度下,这里使用Class.forName() (注意获取字节码的时的class和Class,不要掉坑里了)
2.代码种第二行(标注2的地方) 我们都知道java创建对象是依靠构造器的,这种依靠反射的创建对象也不例外,代码第二行即是获取构造器的字节码
,当然例子中的father有无参和有参的,无参即是.getConstructor();,有参即
.getConstructor(String.class);
3.代码第三行即是利用constructor最后的创建对象
4.测试,返回结果


fathername


与用new创建的对象返回结果一致

相关文章:

  • 2021-08-05
  • 2021-12-20
  • 2021-10-14
  • 2021-10-14
猜你喜欢
  • 2021-11-15
  • 2021-12-20
  • 2021-07-31
  • 2021-06-18
  • 2021-11-04
  • 2021-10-24
相关资源
相似解决方案