aspectjweaver AspectJ

aspectjweaver AspectJ基于aop的依赖jar包,可以实现切面过滤拦截。依赖包:<!–https://mvnrepository.com/artifact/org.aspectj/aspectjweaver–><dependency><groupId>org.aspectj</groupId><artifactId>asp…

大家好,又见面了,我是你们的朋友全栈君。

基于aop的依赖jar包,可以实现切面过滤拦截。

依赖包:

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.0.RELEASE</version>
</dependency>

使用:

1.@Aspect和@Configuration添加到定义的Aspect类上,指明切面类。

2.定义切点:@Pointcut(“execution(* com.controller.Test2Controller.*(..))”)

将@Pointcut定义到切点方法上

3.切面过滤注解:

@Before(“pointcut()”)

@Around(“pointcut()”)

@AfterReturning(value = “pointcut()”,returning = “returnValue”)

@After(“pointcut()”)

@AfterThrowing

这几个注解的过滤顺序为:

@Around-joinPoint.proceed(args)前

@Before

@Around-joinPoint.proceed(args)后

@After

@AfterReturning/@AfterThrowing

4.举个栗子:

import com.alibaba.fastjson.JSON;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;

@Aspect
@Configuration
public class TestAspect {

    Logger logger = LoggerFactory.getLogger(getClass());

    // 定义切点Pointcut
    @Pointcut("execution(* .test.Test2Controller.*(..))")
    public void pointcut() {
        logger.info("pointcut---------------execute");
    }


    @Before("pointcut()")
    public void before(){
        logger.info("@Before------------execute");
    }

    @Around("pointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{

        Signature signature = joinPoint.getSignature();
        logger.info("@Around-joinPoint.proceed(args)前");
        logger.info("@Around-执行目标方法前参数:"+Arrays.toString(joinPoint.getArgs()));
        Object[] args = joinPoint.getArgs();
        if(args != null &&args.length>0){
            args[0]="update";
        }
        Object proceed = joinPoint.proceed(args);
        logger.info("@Around-joinPoint.proceed(args)后");
        logger.info("@Around-被织入的目标对象:" + joinPoint.getTarget());
        logger.info("@Around-返回值:"+JSON.toJSONString(proceed));
        return JSON.toJSONString(proceed);
    }

    @AfterReturning(value = "pointcut()",returning = "returnValue")
    public void afterReturning(JoinPoint point, Object returnValue) {
        logger.info("@AfterReturning-方法:"+point.getSignature().getDeclaringTypeName()+point.getSignature().getName());
        logger.info("@AfterReturning-参数:"+Arrays.toString(point.getArgs()));
        logger.info("@AfterReturning-返回值:" + returnValue);
        logger.info("@AfterReturning-被织入的目标对象:" + point.getTarget());
    }

    @After("pointcut()")
    public void after(JoinPoint point){
        logger.info("@After-方法:"+point.getSignature().getDeclaringTypeName()+point.getSignature().getName());
        logger.info("@After-参数:"+Arrays.toString(point.getArgs()));
        logger.info("@After-被织入的目标对象:" + point.getTarget());
    }
    @AfterThrowing("pointcut()")
    public void afterThrowing(JoinPoint point){
        logger.info("@AfterThrowing-----",point.getTarget());
    }

}

控制台:

2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.around(TestAspect.java:36)
-@Around-joinPoint.proceed(args)前
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.around(TestAspect.java:37)
-@Around-执行目标方法前参数:[null]
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.before(TestAspect.java:29)
-@Before------------execute
执行test-----update
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.around(TestAspect.java:43)
-@Around-joinPoint.proceed(args)后
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.around(TestAspect.java:44)
-@Around-被织入的目标对象:net.buybal.order.controller.test.Test2Controller@155814e5
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.around(TestAspect.java:45)
-@Around-返回值:"update"
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.after(TestAspect.java:59)
-@After-方法:net.buybal.order.controller.test.Test2Controllertest
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.after(TestAspect.java:60)
-@After-参数:[update]
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.after(TestAspect.java:61)
-@After-被织入的目标对象:net.buybal.order.controller.test.Test2Controller@155814e5
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.afterReturning(TestAspect.java:51)
-@AfterReturning-方法:net.buybal.order.controller.test.Test2Controllertest
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.afterReturning(TestAspect.java:52)
-@AfterReturning-参数:[update]
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.afterReturning(TestAspect.java:53)
-@AfterReturning-返回值:"update"
2019-11-26 17:22:56 [http-bio-9998-exec-1] INFO -Caller+0    at *.TestAspect.afterReturning(TestAspect.java:54)
-@AfterReturning-被织入的目标对象:net.buybal.order.controller.test.Test2Controller@155814e5
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.around(TestAspect.java:36)
-@Around-joinPoint.proceed(args)前
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.around(TestAspect.java:37)
-@Around-执行目标方法前参数:[null]
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.before(TestAspect.java:29)
-@Before------------execute
执行test-----update
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.after(TestAspect.java:59)
-@After-方法:net.buybal.order.controller.test.Test2Controllertest
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.after(TestAspect.java:60)
-@After-参数:[update]
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.after(TestAspect.java:61)
-@After-被织入的目标对象:net.buybal.order.controller.test.Test2Controller@2965bb5f
2019-11-26 17:19:27 [http-bio-9998-exec-1] INFO -Caller+0    at *.aspect.TestAspect.afterThrowing(TestAspect.java:65)
-@AfterThrowing-----

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157905.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 获取图片外链的方法–网易相册[通俗易懂]

    获取图片外链的方法–网易相册[通俗易懂]网易相册地址:http://photo.163.com第一步,注册账号,登陆之后,点击进入我的相册;第二步,新建相册,上传照片;第三步,点击查看图片;便可以在地址栏中获得外链地址,譬如我的微信公众号二维码的外链:http://img2.ph.126.net/dkcIGZEoMTIFvVt_8rS4aA==/6597941679379786814.jpg…

    2022年6月21日
  • linux默认安装路径在哪里_linux常用的20个命令

    linux默认安装路径在哪里_linux常用的20个命令Nginx安装安装路径 /usr/local/nginx配置文件 /usr/local/nginx/conf/nginx.conf启动:进入到/usr/local/nginx/sbin下,./nginx关闭:进入到/usr/local/nginx/sbin下 ./nginx -s stop 重启:同上, -s reload停止 kill -9 线程号查看 ps -ef|grep nginxhttps://www.jianshu.com/p/9f2c162ac77c 可参考安装ng

    2022年8月19日
  • TCP三次握手详解及释放连接过程[通俗易懂]

    TCP三次握手详解及释放连接过程[通俗易懂]TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。两个序号和三个标志位:  (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。  (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。  (3)标志位:共6个,即URG、AC…

    2022年6月13日
  • NoSQL

    NoSQL

    2022年3月2日
  • Cubieboard 架设Git服务器

    Cubieboard 架设Git服务器如果你现在用的是Cubieboard或者树莓派卡片式电脑,可以查看本文之前,学习前面的四个教程,它可能会对你非常有帮助。如果你是普通的Linux用户或者LinuxVPS、Linux独立服务器等,可以直接跳过查看本文。教程一Cubieboard安装Linux系统教程二CubieboardLinux服务器配置教程三CubieboardLinux服务器安装L…

    2022年7月22日
  • Win10安装jdk11及环境变量配置

    Win10安装jdk11及环境变量配置Win10安装jdk11及环境变量配置写在前面卸载旧版本jdk下载jdk11配置环境变量经验教训写在前面我第一次安装java是在17年初,距离现在已经一年半了。今天上oracle官网一看,jdk都已经更新到11.0.1了,然而我用的还是1.8.0_171版本的老古董,遂决定把jdk升级一下,结果没想到这一升级就折腾了老半天。在这里把我的升级的详细步骤以及经验教训和大家分享一下。卸载旧版本jd…

    2022年7月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号