读书人

Spring框架学习札记2:AOP及其相关概念

发布时间: 2012-09-09 09:27:54 作者: rapoo

Spring框架学习笔记2:AOP及其相关概念和使用示例

1.AOP及其相关概念

1)AOP 面向切面(方面)编程

主要解决共通处理问题.可以将共通处理部分单独用一个组件封装起来,然后利用SpringAOP机制作用到某一批目标对象上面.从而降低共通处理对象和目标对象之间关联.

AOP与OOP关系,OOP面向对象编程,侧重于对象的封装;AOP面向切面编程是以OOP为基础,侧重于对共通处理的操作.改善程序结构,提高灵活性.

2)切面(方面)Aspect
  指的是共通处理部分的代码.也称为关注点的实现.

3)连接点Joinpoint
  指的是作用在目标对象上的位置.例如方法调用,异常发生后等

4)切入点Pointcut
  指的是连接点的集合,对应一个切入点表达式.

5)目标对象Target Object
  指的是使用切面功能的对象.需要在Spring容器中.

6)通知 Advice
  指的是连接点作用的时机.例如方法调用前,方法调用后执行切面功能等.

7)动态代理AutoProxy
  采用AOP之后,Spring会为每一个目标对象创建一个代理对象,该代理对象相当于切面和目标对象功能的结合体.

Spring采用两种方式:
a.JDK Proxy方式
适用于目标对象有接口.
b.CGLIB方式
适用于目标对象没有接口.

2.AOP使用示例

UserDAO.java:

d.测试执行TestUserService.java:

3.通知类型
1)前置通知

<aop:after -throwing/>

目标对象方法调用出现异常后执行.
try{
         前置通知
         环绕通知1
         目标对象方法
         环绕通知1
         后置通知
}catch(){
         异常通知
}finally{
         最终通知
}
4.切入点表达式

*1)方法限定execution

示例1:任意公共方法的执行
execution (public * *(..))
示例2:任何一个名字以“set”开始的方法的执行
execution (* set*(..))
示例3:AccountService中定义的任意方法的执行
execution (* service.AccountService.*(..))
示例4:在service包中定义的任意方法的执行
execution (* service.*.*(..))
示例5:在service包或其子包中定义的任意方法的执行
execution (* service..*.*(..))

*2)类型限定within

示例1:AccountService中定义的任意方法的执行
within (service.AccountService)
示例2:在service包中定义的任意类型的任意方法
within (service.*)
示例3:在service包或其子包中定义的任意类型的任意方法
within (service..*)

*3)Bean对象名限定bean

示例:匹配所有的id或name名字以Service结束的组件
bean(*Service)

4)特定类型限定this或target

this指的是限定特定的代理类型
target指的是限定特定的目标对象类型
示例1:实现了AccountService的代理对象
this (service.AccountService)
示例2:实现了AccountService的目标对象
target (service.AccountService)

5)方法参数限定args

示例:匹配方法有一个String参数的
args (java.lang.String)

—————————

读书人网 >编程

热点推荐