本篇文章其实没有特别的主题,好像都涉及到那么一点,包括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将这个要依赖的对象被动的注入,也就是说获取对象实例的控制权被反转了,不再是主动,而是从第三方手里“获取”。