1.之前学习spring框架的时候老师说spring Ioc的底层原理是反射,一直是一知半解,看来这位博主的讲解,稍有感触并简单总结了一下.
2.什么是java反射机制
正常在java开发中调用对象的方法和属性需要先导入类所在的包,然后new一个对象,再通过对象.属性或者方法实现,反射则是先得到class对象,然后实例化对象,反射的源头就是class类,文档中的描述是:
public final class Class
extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement
3.怎么运用反射(3种方式)
3.1,Object提供一个返回class的方法.getCalss():
Cat cat=new Cat();
Class class=cat.getClass();//有对象了反射犹如鸡肋
3.2.类.class
Class class=Cat.class;//需要导包
3.3.利用Class类的Static方法取得
public static Class<?> forName(String className)
throws ClassNotFoundException
Class class=Class.forName(String string);
string为真实路径,就是带包名的类路径,包名.类名
4.获取了class,想要达到什么目的?
动态调用类的属性和方法,详细可阅读原博文:https://blog.csdn.net/sinat_38259539/article/details/71799078
5.spring IOC和反射
spring ioc控制反转,简单的理解是我们不用去new一个对象,只是告诉BeanFactory容器我们需要什么对象,用工厂的方式,给出一个个实例,而在工厂里面,用了单例,但是真正实例化,则是反射的newInstance来创建对象,好处就是高内聚,低耦合,怎么实现呢?
String className = readfromXMlConfig;//从xml 配置文件中获得字符串
Class c = Class.forName(className);
factory = (AInterface)c.newInstance();
理解不深,有误之处烦请指教