SpringAOP方式面向切面编程
本篇目标告诉Spring AOP面向切面编程是什么;基本概念;通过方法名当切点和通过注解当切点方式的示例Demo;面向切面编程与基本概念演示代码方法名当切点注解当切点代码地址https://github.com/wayss000/learnSpring/tree/master/SpringAOP...
本篇目标
- 告诉Spring AOP面向切面编程是什么;
- 基本概念;
- 通过方法名当切点和通过注解当切点方式的示例Demo;
面向切面编程与基本概念
什么是面向切面编程
实际工作中,会遇到一直业务场景,就是某些方法都要做相同的功能,比如,所有方法都要加上日志,某些方法需要加上监控,某些方法需要加上事务,这时候,如果在每个方法里面都写上相同的代码(比如写日志,上报监控),或者修改原有代码加上相同的逻辑,这样的代码写的就不够优雅,这时就需要面向切面编程的思想了。
面向切面编程,就是在一类事件上,都要执行那个逻辑(日志,监控,事务),抽出来。这个通用逻辑,可以被模块化为特殊的类,叫做切面(aspect)。需要执行这段通用逻辑的方法上叫做切点(poincut)。
基本概念
通知(Advice):通知定义了切面是什么以及什么时候执行。
Spring切面可以应用的5中类型的通知:
1. 前置通知(Before):在目标方法被调用之前调用通知功能;
2. 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
3. 返回通知(After-returning):在目标方法成功执行之后调用通知;
4. 异常通知(After-throwing):在目标方法抛出异常后调用通知;
5. 环绕通知(Around):通知包裹了被通知的方法,再被通知的方法调用之前和调用之后执行自定义的行为;
连接点(Join point):连接点是在应用执行过程中能够插入切面的一个点。
切点(Poincut):切点的定义会匹配通知索要组织入的一个或多个连接点。
切面(Aspect):切面是通知和切点的结合。通知和切点共同定义了切面的全部内容—-他是什么,在何时和何处完成功能。
引入(Introduction):引入允许我们向现有的类添加新方法或属性。
织入(Weaving):织入是把切面应用到目标对象并创建新的代理对象的过程。
演示代码
下面给了方法名当做切点和注解当做切点的两种方式:
方法名当切点
/**
* 声明一个切点
*/
@Pointcut("execution(* pers.wayss.springAOP.interceptor.HelloWorld.getMessage1(..))")
public void pt1(){
}
/**
* 在切点方法执行之前,执行此方法
*/
@Before("pt1()")
public void beforeHelloWorld1(){
System.out.println("before Message1");
}
注解当切点
/**
* 在切点注解的方法之前执行
*/
@Before("@annotation(Anno)")
public void annoBefore(){
System.out.println("annoBefore");
}
代码地址
如果有不理解的,建议参考代码,调试代码有助于理解。
https://github.com/wayss000/learnSpring/tree/master/SpringAOP
参考《Spring实战(第四版)》第四章
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)