Spring AOP编程
#AOP概念
Aspect Oriented Programming
面向切面编程
Object Oriented Programming
面向对象编程
AOP是以OOP为基础,可以将共通业务和传统业务解耦,利用配置指定作用关系。
AOP使用时机:共通处理;调用时机相同#切面(Aspect)
切面就是提取出来的共通的业务处理逻辑可以通过配置作用到其他
目标组件方法上(在Spring容器中,切面组件可以往其他的Bean组件上作用)#切入点(Pointcut)
用于指定哪些组件或方法是切入目标,在Spring中是通过一个切入点表达式指定。##类型限定表达式
within(类型)
within(org.service.UserService)
//匹配org.service包下所有类的方法
within(org.service.*)
//匹配org.service包及子包下所有类的方法
within(org.service..*)##方法限定表达式
execution(修饰符? 返回类型 方法名(参数)抛出异常?)//匹配UserService.checkLogin方法
execution(* org.service.UserService.checkLogin(..))//匹配所有Bean中load开头的方法
execution(* load*(..))
execution(* org.service.*.*(..))execution(* org.service..*.*(..))
##Bean名称限定表达式
bean(Bean组件的id名)
//匹配Spring容器中id=userService的组件所有方法
bean("userService")
//匹配所有以Service结尾的Bean组件
bean("*Service")#通知(Advice)
指定切面切入目标组件方法的时机。
Spring提供了以下类型
--前置通知<aop:before>
--后置通知<aop:after-returning>--最终通知<aop:after>
--环绕通知<aop:around>--异常通知<aop:after-throwing>
try{
执行切面组件处理-前置通知
//目标组件方法
执行切面组件处理-后置通知
}catch(){
执行切面组件处理-异常通知
}finally{
执行切面组件处理-最终通知
}
#目标(Target)
切入点指定的组件就是目标。要追加功能的组件
#动态代理(AutoProxy)
切面:要追加啥功能?
切入点:要给谁追加功能?
通知:啥时候追加功能?