zoukankan      html  css  js  c++  java
  • Java基于自定义注解的面向切面的实现

    目的:实现在任何想要切的地方添加一个注解就能实现面向切面编程

    自定义注解类

    @Target({ElementType.PARAMETER, ElementType.METHOD})    
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface LongOu {
        
    }

    @Target,@Retention都是java的元注解(总共有4个):

    @Target:设置注解的使用范围,这里设置可以用在参数上和方法上。

    @Retention:设置注解的生命周期,这里设置在运行时。

    切面类:

    @Aspect//声明这是一个切面
    @Component//把这个类交给spring管理
    public class LogOuAspect {
        // 把切面的连接点放在了我们的注解上
        @Pointcut("@annotation(com.example.demo.log.LongOu)")
        public void ouAspect() {
        }
        // 在这里定义前置切面
        @Before("ouAspect()")
        public void beforeMethod(JoinPoint joinPoint) {
            
            // 这里执行保存日志的动作
            System.out.println("方法前.......");
            //得到被切方法的参数
            System.out.println(joinPoint.getArgs()[0]);
        }
    }

    conctronller类:

    @RestController  //springboot注解,类下的所有方法返回的数据类型为jason
    public class AspectController {
        @RequestMapping("/getUser")
        @LongOu//这是我们自定义的注解,加上这个注解后就能够切到这个方法了。
        public User getUser(@PathVariable Integer id,HttpServletRequest request) {
            System.out.println("方法中。。。。。");
            User user=new User();
            user.setName("小明");
            user.setPassword("xxxx");
            return user;
        }
    }

    实体类:

    public class User {
        Integer id;
        String name;
        String password;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
        
    }

    运行结果:

    方法前.......
    方法中。。。。。

  • 相关阅读:
    服务器迁移的标准
    WMS日常运维_WJC
    WMS 162服务器空间满,清日志
    从壹开始【学代码】|| 我开发中的用到的几个框架
    从壹开始 [ Ids4实战 ] 之七 ║ 客户端、服务端、授权中心全线打通
    从壹开始 [ Design Pattern ] 之二 ║ 单例模式 与 Singleton
    从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置
    从壹开始 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书【已完成】
    回答
    三行
  • 原文地址:https://www.cnblogs.com/tongkey/p/8371833.html
Copyright © 2011-2022 走看看