zoukankan      html  css  js  c++  java
  • 【java自定义注解2】java自定义注解结合Spring AOP

          承接上一篇,注解应用于属性,本篇定义了一个用于方法的注解,结合Spring AOP 实现 切面编程。

          以下demo演示使用了SpringBoot,与SSM中使用方式大致相同,效果如下:

    1、自定义注解(用于方法)

    /**
     * 自定义注解
     * @author Zx
     *
     */
    @Target(ElementType.METHOD)//作用于方法
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface MethodAonn {
        //注解属性
        String name()  default "";;
        String prot() default "";;
        String value() default "默认值";
    }
    

    2、自定义Controller,使用自定义注解

    /**
     * 测试用控制器
     */
    @RestController
    @RequestMapping("asp")
    public class WorkController {
        
        @RequestMapping("/exec")
        //使用自定义注解
        @MethodAonn(name = "注解name属性")
        public void extcute() {
            System.out.println("extcute()方法执行");
        };
        @RequestMapping("/stop")
        @MethodAonn(name = "被注解方法开始执行")
        public void stop() {
            System.out.println("stop()方法执行");
        };
    }
    

    3、创建切面

    @Aspect // 注解声明一个切面
    @Component // 受spring管理的容器
    public class MethodAspect {
        @Pointcut("@annotation(com.xxx.ann.simple2.MethodAonn)") // 注解声明切点,注解的全限定名
        public void annotationPointcut() {
        };
    
        @After("annotationPointcut()")
        public void after(JoinPoint joinPoint) {
            MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
            Method method = methodSignature.getMethod();
            String name = method.getName();
            MethodAonn annotation = method.getAnnotation(MethodAonn.class);
            System.out.println("拦截 : " + name+"方法执行");
            System.out.println(">>>: " + annotation.name());
        }
    }
    

    4、启动类启动容器

    @SpringBootApplication
    @Configuration //注册被spring管理
    @EnableAspectJAutoProxy //注解开启对aspectJ的支持
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    5、启动后通过req访问测试:

    http://localhost:8080/asp/exec

    6、拦截结果:

    extcute()方法执行
    拦截 : extcute方法执行
    >>>: 注解name属性
    
  • 相关阅读:
    LVM : 简介
    Linux 磁盘与磁盘分区
    Terraform:创建 Azure 虚机
    Terraform:简介
    Jenkins CLI 命令详解
    Bash 中常见的字符串操作
    读书笔记2014第16本:《视觉繁美:信息可视化方法与案例解析》
    读书笔记2014第15本:《视不可当----信息图与可视化传播》
    读书笔记2014第14本:《李鸿章传》
    中国象棋引擎的C#源代码
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054102.html
Copyright © 2011-2022 走看看