首先提出两个问题:
为什么用spring IOC,有什么好处?
怎么用呢?
Spring的依赖注入关键就是实现类和类之间的解耦。
(1)我们第一步学习编程时,就是在一个类中去new出一个类,最简单的一个人拥有一把斧子,在具体实现时,Axe axe = new Axe();可以通过构造函数或者set方法把斧子交给Person去使用。如果这个时候我们要使用锤子Hammer怎么办呢?我需要
修改Person里面的代码吧?!(这好比两种数据库DAO的实现)
(2)然后是学习
工厂模式,抽象工厂方法,我们定义一个Tool的接口,然后有Axe和Hammer等各种实现,ToolFactory类对外暴露getTool(String type)的方法,这样当有新的工具需要加入时,我们不会再修改Person的代码了,实现了两个类的解耦。
(3)至此我们做了大量的工作来实现类关系的维护,要是有一个通用的框架把这些工作做好该有多好呢?Spring IOC完成了这项工作。在Spring中是通过容器来管理两个类的依赖关系,通过
xml配置文件
配置Bean的方式来表达出两个类的耦合关系,配置文件中需要写出具体类的路径,而不是接口了!! 因为要用java的反射机制实现依赖的注入。POJO类需要用
setter方法或者构造方法
。注入的方式没有侵入性。
两个问题我们应该有了答案。
示例代码
BeanFactory beanFactory =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
ApplicationContext ctx =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
System.
out
.println(ctx);
Person p = (Person) ctx.getBean(
"person"
);
System.
out
.println(p.getName());
配置文件
<
bean
id
=
"person"
class
=
"com.gxw.spring.model.Person"
>
<
property
name
=
"name"
>
<
value
>
tt
</
value
>
</
property
>
</
bean
>
通过这句Person p = (Person) ctx.getBean( "person");,我们可以把IOC容器看成一个大的工厂。