• 【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属性
    
  • 相关阅读:
    用例要素(非原创)
    边界接口设计
    项目管理平台架构
    内外网邮件自动转发
    Python技术公众号100天了
    将博客搬至CSDN
    Android项目真的要去做混淆(加密)处理
    【转】Android Gson的使用
    【转】在eclipse上使用Git
    在AChartEngine上绘图,手指标记当前位置
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054102.html
Copyright © 2020-2023  润新知