SPRING_AOP_实现
xml配置实现aop
【SPRING_AOP_实现】1)需要导入jar包:
spring-aop-4.3.5.RELEASE.jar
aopalliance.jar
aspectjrt.jar aspectj-1.8.2\lib
aspectjweaver.jar aspectj-1.8.2\lib
2)引入aop的名称空间
3)创建切面类对象和aop配置
切入点表达式用法:
参考帮助文档11.2.3 Declaring a pointcut
Some examples of common pointcut expressions are given below.
?the execution of any public method:
execution(public * *(..))
?the execution of any method with a name beginning with "set":
execution(* set*(..))
?the execution of any method defined by the AccountService interface:
execution(* com.xyz.service.AccountService.*(..))
?the execution of any method defined in the service package:
execution(* com.xyz.service.*.*(..))
?the execution of any method defined in the service package or a sub-package:
execution(* com.xyz.service..*.*(..))
?any join point (method execution only in Spring AOP) within the service package:
within(com.xyz.service.*)
?any join point (method execution only in Spring AOP) within the service package or a sub-package:
within(com.xyz.service..*)
?any join point (method execution only in Spring AOP) where the proxy implements the AccountService interface:
this(com.xyz.service.AccountService)
五类通知类型:
前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。
4 注解方式实现aop
@Aspect
@PointCut
@Before
@Component
@Aspect //指定当前类为切面类
public class LogAop {// 指定切入点表单式: 拦截哪些方法; 即为哪些类生成代理对象
@Pointcut("execution(* com.rr.xmlaop.MyDao.*(..))")
public void pointcut(){}//前置通知 执行目标方法前执行
@Before("pointcut()")
public void begin(JoinPoint jp) {
System.out.println("begin:");
System.out.println(jp.getSignature().getName());
}//后置通知,执行目标方法后执行,不论是否异常
@After("pointcut()")
//public void end(){
public void end(JoinPoint jp) throws Exception, SecurityException {}//正常返回后通知,调用目标方法结束后执行,在代理返回前执行,异常不执行
@AfterReturning("pointcut()")
public void afterReturn(){
System.out.println("after return");
}//环绕方法,必须使用ProceedingJoinPoint参数
@Around("pointcut()")
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("环绕前....");
pjp.proceed();
// 执行目标方法
System.out.println("环绕后....");
}
}
aop的扫描
推荐阅读
- 由浅入深理解AOP
- Activiti(一)SpringBoot2集成Activiti6
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- SpringBoot调用公共模块的自定义注解失效的解决
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- 解决SpringBoot引用别的模块无法注入的问题