一.什么是AOP
AOP(Aspect Orient Programming),也就是面向切面编程。可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程。
二.AOP的作用
常常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。
三.AOP名词解释
切面(Aspect)
需要加入到业务中的需求(日志,事物管理)通知(Advice)
切面中的每一个方法目标(Target)
被通知的对象代理(Proxy)
向目标对象通知之后创建的对象连接点(JointPoint)
程序执行的特定位置,方法执行的前后切点(PointCut)
通知织入目标方法的特定连接点,execution表达式里面的方法
四.AOP在spring中的实现
1.引入jar包
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aop-4.0.6.RELEASE.jar
spring-aspects-4.0.6.RELEASE.jar
2.在配置文件中加入aop命名空间
3.配置bean(target,aspect)
4.配置AOP
<aop:config>
<!-- 切点表达式-->
<aop:pointcut id="XX" expression="execution(* XX.XX.*(..))">
<!-- 配置切面及通知-->
<aop:aspect ref="XX">
<aop:before method="" ppoint-ref="" />
<aop:after method="" point-ref="" />
</aop:aspect>
</aop:config>
AOP基于注解方式
1.在配置文件中加入如下配置
<aop:aspectj-autoproxy />
2.定义切面
@Component: 类加入ioc容器中
@Aspect: 指定这个类是一个切面
@Order: 指定切面执行的优先级,越小优先级越高
在类的方法中定义
@Before("execution(* 包.类.方法(..))"): 前置通知
@After: 后置通知
@Around: 环绕通知
@AfterReturning(value="execution(), returning="result"): 返回通知,在方法正常结束后执行,可以访问方法返回值
public void end(Object result){
System.out.println("end whit"+result);
}
@AfterThrowing(value="execution()",throwing="e"):异常通知,目标方法抛出异常时候执行。
注:可以定义一个切点,不需要在每个通知中写切点表达式
@Pointcut(“execution(* XX.XX.*(. .))”)
public void pointcut(){}