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属性
    
  • 相关阅读:
    Perl 简介
    一定时间后延时变长问题
    CPAN常见问题集
    J2SE简介
    brian的Perl问题之万能指南
    清洁工 VS 亿万富翁
    关于VC中的"stdafx.h"
    Perl模式匹配
    wiki介绍
    生活中10大省钱小秘诀 白领一族"必备诀窍"
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054102.html
Copyright © 2011-2022 走看看