多种方式实现依赖注入
在前一章中,我们使用spring通过setter访问器实现了对属性赋值,这种做法被称之设值注入,Spring还提供了通过构造方法赋值的能力,称为构造注入。
构造注入
一个元素表示构造方法的一个参数,且使用时不区分顺序。当构造方法的参数出现混淆,无法区分时,可以通过元素的index属性指定该参数的位置索引,位置从0开始。元素提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
构造注入的时效性好,在对象实例化时就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的形式,使用灵活性不足。并且大量的setter访问器增加了类的复杂性。Spring并不倾向于某种注入方式,用户应该根据实际情况进行合理的选择。当然Spring提供的注入方式不只这两种,只是这两种方式用得最普遍,有兴趣的学员可通过Spring的开发手册了解其他注入方式。
使用P命名空间实现属性注入
Spring配置从2.0版本开始采用schema形式,使用不同的命名空间管理不同类型配置,使得配置文件更具扩展性。Spring基于schema的配置方案为许多领域的问题提供了简化的配置方法,大大简化配置的工作量。
p命名空间的特定是使用属性而不是子元素的形式配置Bean的属性,从而简化了Bean的配置。
语法 p:属性名=“属性值”
p:属性名-ref=“Bean的id”
注入不同数据类型
1、注入直接量(基本数据类型)
如果属性值包含了XML中的特殊字符(&,<,>,",’),则注入时需要进行处理,
2、引用其他Bean组件
Spring中定义的Bean可以互相引用,从而建立依赖关系,除了使用ref属性,还可以通过子元素实现。property
3、使用内部Bean
在引用了property中在嵌套bean,该方式就是内部bean。
4、注入集合类型的属性
对于List或数组类型的属性,可以使用标签注入。标签中间可以使用、等标签注入集合元素,甚至是另一个标签。对于Set类型的属性,可以使用标签注入。
5、注入null和空字符串值
可以使用注入空字符串值,使用注入null值。
其他增强类型
异常抛出增强
异常抛出增强的特点是在目标方法抛出异常时织入增强处理。使用异常抛出增强,可以为各功能模块提供统一的、可拔插的异常处理方案。
最终增强
最终增强的特点是无论发放抛出异还是正常退出,该增强都会得到执行,类似于异常处理机制中finally块的作用,一般用于释放资源。使用最终增强,就可以为各功能模块提供统一的、可拔插的处理方案。
环绕增强
环绕增强在目标方法的前后都可以织入增强处理。环绕增强是功能最强大的增强处理,Spring把目标方法控制权全部交给了它。在环绕增强处理中,可以获取修改目标方法的参数、返回值,可以对它进行异常处理,甚至可以决定是否被执行。
使用注解定义Bean
》@Repository:用于标注DAO类。
》@Service:用于标注业务类。
》@Controller:用于标注控制器类。
使用特定的注解使组件的用途更加清晰,并且Spring在以后的版本中可能会为它们添加特殊的功能,所以推荐使用特定的注解来标注特定的实现类。