ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring AOP 注解开发

2021-05-28 12:31:46  阅读:185  来源: 互联网

标签:.. Spring void class Aspect AOP 注解 public before


首先,我们要知道AOP中我们要配置哪几部分

  1. 切面(Aspect)任何存在通知和切入点映射关系的类都需要被修饰为@Aspect,同时因为我们希望交给Spring来管理,所以用@Component来修饰作为一个Bean
  2. 在切面中,将通知(共性方法advice)抽取为一个方法
  3. 切入点(Pointcut)使用一个public void funcName()方法,在该方法上标记@pointcut()里面的参数设置为正则表达式,符合该表达式的方法会被监听拦截到。
  4. 通知和切入点的映射关系,在通知上面配好切入点的执行时机@before @after @around @afterReturning @afterThrowing

接下来我们就来实操一下:
第一步,配置切面:

@Component
@Aspect
public class AOPAdvice {

}

第二步,配置切入点:

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}
}

第三步,抽取通知方法:

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}
    
    public void before(){
        System.out.println("前置before...");
    }
}

第四步:配置方法和切入点的关系,以Before为例:

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}

    @Before("pt1()")
    public void before(){
        System.out.println("前置before...");
    }
}

进阶:
我们可以把切入点单独做一个类

public class AOPPointcut {
    @Pointcut("execution(* *..*(..))")
    public void pt2(){}
}

同时使用@around来进行织入

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}

    @Before("pt1()")
    public void before(){
        System.out.println("前置before...");
    }
    @Around("AOPPointcut.pt2()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("环绕前around before...");//织入部分1
        Object ret = pjp.proceed();//这里就代表原先执行的方法,我们可以获得该部分方法的返回值
        System.out.println("环绕后around after...");//织入部分2
        return ret;//如果要求方法结束后有返回值,我们可以在这里返回
    }
}

最后如果你仍然保留了XML文件的话,那你需要去XML文件里面开启AOP注解的支持。如果是纯注解开发的话,那就去你的主配置类开启支持:

@Configuration
@ComponentScan("com.sun")
@EnableAspectJAutoProxy
public class SpringConfig {
}

标签:..,Spring,void,class,Aspect,AOP,注解,public,before
来源: https://blog.csdn.net/weixin_49640037/article/details/117357230

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有