• 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;
        }
        
        
    }

    运行结果:

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

  • 相关阅读:
    Java集合框架之Set接口浅析
    Java集合框架之Vector浅析
    Java集合框架之LinkedList浅析
    Java集合框架之ArrayList浅析
    Java集合框架之List接口浅析
    数据库设计==>>MySchool
    Windows程序==>>使用ListView控件展示数据
    Windows程序控件升级==>>构建布局良好的Windows程序
    窗体==>>初始Windows程序
    数据库的有关知识==>>我们的血泪史之经典练习(1-2)
  • 原文地址:https://www.cnblogs.com/tongkey/p/8371833.html
Copyright © 2020-2023  润新知