第六章 IoC和AOP使用扩展

第六章 IoC和AOP使用扩展

多种方式实现依赖注入
构造注入
一个元素表示构造方法的一个参数,且使用时不区分顺序。当构造方法的参数出现混淆,无法区分时,可以通过元素的index属性指定该参数的位置索引,位置从0开始。元素提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
构造注入的时效性好,在对象实例化时就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的形式,使用灵活性不足。并且大量的setter访问器增加了类的复杂性。Spring并不倾向于某种注入方式,用户应该根据实际情况进行合理的选择。当然Spring提供的注入方式不只这两种,只是这两种方式用得最普遍,有兴趣的学员可通过Spring的开发手册了解其他注入方式。
使用P命名空间实现属性注入
语法 p:属性名=“属性值”
p:属性名-ref=“Bean的id”
注入不同数据类型
1、注入直接量(基本数据类型)
如果属性值包含了XML中的特殊字符(&,<,>,",’),则注入时需要进行处理,
2、引用其他Bean组件
Spring中定义的Bean可以互相引用,从而建立依赖关系,除了使用ref属性,还可以通过子元素实现。property
3、使用内部Bean
在引用了property中在嵌套bean,该方式就是内部bean。
4、注入集合类型的属性
对于List或数组类型的属性,可以使用标签注入。标签中间可以使用、等标签注入集合元素,甚至是另一个标签。对于Set类型的属性,可以使用标签注入。
5、注入null和空字符串值
可以使用注入空字符串值,使用注入null值。
其他增强类型
异常抛出增强
异常抛出增强的特点是在目标方法抛出异常时织入增强处理。使用异常抛出增强,可以为各功能模块提供统一的、可拨插的异常处理方案。使用aop:after-throwing元素可以定义异常抛出增强。
最终增强
最终增强的特点是无论方法抛出异常还是正常退出,该增强都会得到执行,类似于异常处理机制中finally块的作用,一般用于释放资源。使用aop:after元素即可定义最终增强。
环绕增强
环绕增强在目标方法的前后都可以织入增强处理。环绕增强是功能最强大的增强处理,Spring把目标方法的控制权全部交给了它。在环绕增强处理中,可以获取 或修改目标的参数,返回值,可以对它进行异常处理,甚至可以决定目标方法是否被执行。
使用注解实现IoC的配置
使用注解定义Bean
@Repository:用于标注DAO类
@Service:用于标注业务类
@Controller:用于标注控制器类
使用注解实现Bean组件装配
@Autowired 采用按类型匹配的方式为属性自动装配合适的依赖对象,即容器会查找和属性类型相匹配的Bean组件,并自动为属性注入。若容器中有一个以上类型相匹配的Bean时,则可以使用@Qualifier指定所需要的Bean的名称。
加载注解定义的Bean、
首先在Spring配置文件中添加context命名空间的声明, 然后使用context命名空间下的component-scan标签扫描注解标注的类。base-package属性指定了需要扫描的基准包(多个包名可用逗号隔开。)
使用Java标准注解完成装配
使用注解定义切面
AspectJ简介
AspectJ 是一个面向切面的框架,它扩展了Java语言,定义了AOP语法,能够在编译期提供代码的织入,所以它有一个专门的编译器用来生成遵守字节编码规范的Class文件。
使用注解标注切面
配置文件中首先要导入aop命名空间。只需在配置文件添加aop:aspectj-autoproxy/元素,就可以启用对于@AspectJ注解的支持,Spring将自动匹配的Bean创建代理。
使用注解定义其他类型的增强
Spring的切面配置小结
Spring在同一个问题上提供了多种多种灵活选择,反倒容易令初学者感到迷惑。我们一个根据项目的具体情况做出选择:如果项目采用JDK5.0以上版本,可以考虑使用@AspectJ注解方式,减少配置的工作量;如果不愿意使用注解或项目采用的JDK版本较低而无法使用注解,则可以选择使用aop:aspect配合普通JavaBean的形式。

你可能感兴趣的:(总结)