Bootstrap

Spring基础(IOC原理和反射机制+JavaBean)

本篇文章其实没有特别的主题,好像都涉及到那么一点,包括IOC、反射、bean等等,就往下看吧,或许你也会有跟我一样的感觉:在某个时刻豁然开朗~

1.hello接口


2.业务类


3.测试类


4.运行结果


看到这里,大家都知道,这是没有运用spring的传统写法,HelloImpl需要实现Hello接口,而测试类test依赖于HelloImpl这个业务类,那么就需要在test负责创建这个业务类的实例,然后才可以在该测试类中使用。那么,在Spring中是怎么样的呢?

1.配置文件


注:注意配置文件中的注释部分。

1.Spring是一个放java对象的容器,而放在Spring容器中的java对象就叫做JavaBean

2.Spring配置文件中的<bean>元素,是配置需要Spring容器管理的JavaBean。

3.Spring配置文件中配置的不是类型,而是一个实例

4.Spring配置文件中的bean其实是应该写在java中的代码(这句话放在后面解释

2.测试类


解释一下,这里是现在一个无参构造器中获取实例,然后在测试类test中实现调用。

Spring使用步骤:

1.找到配置文件

2.加载配置文件

3.解析配置文件中的bean元素,并识别id和class

4.通过反射(Class.forName().newInstance())创建这个bean的实例

5.将id作为key、实例作为value存放进Spring容器中

6.getBean取出实例

其中有一点要说一下,也就是解释上面的那就话(Spring配置文件中的bean其实是应该写在java中的代码):

构造器中的代码其实相当于

hello=Class.forName("lm.practice.spring.impl.HelloImpl").newInstance();
,而这句话其实就是创建实例,也就是hello=new HelloImpl();

而这种写法在Spring的应用中就是对应配置文件中的一个<bean>元素了。

好像这样说还是有些不清不楚的,说的简单点就是,Spring通过在配置文件中配置<bean>元素,将一个对象交给IOC容器,然后通过反射机制创建这个对象的实例(操作都是用实例进行的),而在用的时候,只需要获取这个<bean>元素就可以拿到这个对象的实例,然后进行后续的操作。这也就是说,不再通过new一个实例的方式主动获取要依赖的对象的实例,而是通过Spring的IOC将这个要依赖的对象被动的注入,也就是说获取对象实例的控制权被反转了,不再是主动,而是从第三方手里“获取”。


;