AOP概念
切面(Aspect) 与类很相似,切面是横切性关注点的抽象
目标对象(Target Object)
AOP代理类(AOP Proxy) jdk cglib
连接点(Joinpoint) 被拦截到的点,指调用某方法或者处理某异常
切入点(Pointcut) 匹配连接点的断言,一系列连接点的集合,它指明处理方式(Advice)将在何时被触发
通知(Advice) 拦截到joinpoint之后要做的事情
前置通知(Before advice):在某连接点之前执行的通知
后置通知(After returning advice):在某连接点正常完成后执行的通知
异常通知(After throwing advice):在方法抛出异常退出时执行的通知
环绕通知(Around Advice):包围一个连接点的通知
最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
织入(Weaving) 指将aspects应用到target对象 并导致proxy对象创建 的过程 spring aop
execution (* com.puckasoft.dao.PhotoDao.* (..))
AOP配置
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
加入jar包
spring-framework-2.5.6\lib\aspectj\aspectjrt.jar
spring-framework-2.5.6\lib\aspectj\aspectjweaver
AOP xml
<aop:config>
<aop:pointcut> 切入点
<aop:aspect> 切面
<aop:before> 前置通知
<aop:after-returning> 后置通知
<aop:after-throwing> 异常通知
<aop:after> 最终通知
AOP注解
启用@AspectJ支持
<aop:aspectj-autoproxy/>
@Aspect
@Pointcut
任意公共方法的执行:
execution(public * *(..))
任何一个名字以“set”开始的方法的执行:
execution(* set*(..))
AccountService接口定义的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
在service包中定义的任意方法的执行:
execution(* com.xyz.service.*.*(..))
在service包或其子包中定义的任意方法的执行:
execution(* com.xyz.service..*.*(..))
@Before [Object arg]
@AfterReturning pointcut,returning [Object result]
@AfterThrowing pointcut,throwing Exception [Exception e]
@After
@Around