1.AOP的概念及优点
Aspect Oriented Programming面向方面编程.
面对象编程的关注点是对象,面向方面编程以面向对象编程为基础,关注点是切面,切面组件可以作用在若干目标对象的方法上,封装了具有通用性的一些处理.例如日志记录,事务处理,异常处理等等.
面向方面编程优点:将共通处理封装成了一个独立组件,利用配置形式作用在了某一批目标对象上,实现组件的重复利用,将切面和目标对象解耦,实现了低耦合应用.
*a.切面(Aspect)
封装了共通处理的组件,可用于切入到目标对象的处理方法中
*b.切入点(Pointcut)
用于指定目标对象和方法的一个表达式.是连接点的集合.
连接点是切面组件与某一个目标对象方法的作用点,例如方法调用和异常发生
*c.通知(Advice)
用于指定切面功能切入目标对象方法的位置.例如切入到目标方法调用之前,目标方法调用之后等.
通知类型:前置通知,后置通知,环绕通知,最终通知,异常通知
try{
//执行前置通知
//执行环绕通知--前置
执行目标对象方法
//执行环绕通知--后置
//执行后置通知
}catch(Exception ex){
//执行异常通知
}finally{
//执行最终通知
}
d.目标对象(Target)
需要使用切面功能的,被切入的Bean对象.使用切入点表达式指定
e.动态代理(AutoProxy)
在Spring采用了AOP之后,从容器取出的目标对象是一个动态代理类型,调用代理对象方法时,代理对象会调用切面功能和目标对象功能.
动态代理类生成技术:
有接口的目标对象采用JDK Proxy技术.
没有接口的目标对象采用CGLIB技术.
2.切入点表达式的定义
1)方法限定execution
execution(修饰符? 返回类型 方法名(参数类型) throws 异常?)
a.匹配com.tarena.UserDAO的save()方法
execution(* com.tarena.UserDAO.save(..))
b.匹配com.tarena.UserDAO的所有方法
execution(* com.tarena.UserDAO.*(..))
c.匹配com.tarena.UserDAO的所有public void方法
execution(public void com.tarena.UserDAO.*(..))
d.匹配com.tarena包下所有类型的所有方法
execution(* com.tarena.*.*(..))
e.匹配com.taren...