1.IoC是什么?
1.1 IoC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。
1.2 在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。Ioc容器主要控制了外部资源获取(不只是对象包括比如文件等)。
2.反转是什么鬼?
2.1 传统的应用程序中是我们自己在对象中主动创建该对象所依赖的对象,这是正转。
2.2 如果有一个容器帮你查找该对象所需要依赖的对象并创建及注入依赖对象,这就是反转。
3.DI(依赖注入)
3.1 即由容器动态的将某个依赖关系注入到组件之中。
3.2 依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。简单的来说就是应用程序从主动变为被动的等待IoC/DI容器来创建并注入它所需要的资源了,这样有效的分离了对象和它所需要的外部资源,使得它们松散耦合。
4.简单说一下实现原理
- IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
- 我们先创建了一个BeanFactory工厂,然后通过getBean方法获得指定的Bean对象。
- Class bean = Class.forName(cls.getText());
- Object obj = bean.newInstance();
- Class.forName("")返回的是指定类
- Class.forName("").newInstance()返回的是指定类的对象
- Class.forName( )是动态加载类,在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。
- 这里有必要提一下就是Class下的newInstance()和new有什么区别? 首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。
- Method entryPoint = bean.getMethod(attributename, String.class);
- entryPoint.invoke(obj,value);
- getMethod获得指定方法的方法调用入口。然后调用invoke就会执行方法。