初探spring四种依赖注入之一set注入
Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。
当系统需要重构时,代码的改写量将大大减少。上面所说的一切都得宜于Spring的核心机制,依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。
网上查很多资料介绍四种IOC,不论哪一种IOC实质无非就是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。
现在我就把我接触最早的set注入总结了一下。
- Set注入
随便在网上找了一短代码作为用例
package com.csdn.action;
public class ResAction {
//注入对象resDao
private ResDao resDao;
//一定要写被注入对象的set方法
public void setResDao(ResDao resDao) {
this.resDao = resDao;
}
public void ok(){
resDao.ok();
}
}
类中需要实例化一个ResDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建ResDao的set方法(这是ioc的注入入口)。
<!--配置bean,配置后该类由res管理-->
<bean name="ResAction" class="package com.csdn.action; ">
<!--(1)依赖注入,配置当前类中相应的属性-->
<property name="resDao" ref="resDao"></property>
</bean>
<bean name="resDao"
<bean name="ResAction" class="package com.csdn.action; ">
随后编写res的xml文件,中的name属性是class属性的一个别名,class属性指类的全名,因为在ResAction中有一个公共属性Resdao,所以要在标签中创建一个标签指定ResDao。标签中的name就是ResAction类中的SpringDao属性名,ref指下面,这样其实是res将ResDaoImpl对象实例化并且调用ResAction的setResDao方法将ResDao注入
set注入是最简单的一种注入方式,也是使用的比较多的一种方式。
另外注意:通过Res创建的对象默认是单例的,如果需要创建多实例对象可以在标签后面添加一个属性:
xml代码
<bean name="..." class="..." scope="prototype">