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属性
    
  • 相关阅读:
    java 编程基础 Class对象 反射:代理模式和静态代理
    sql优化(排序)
    Mysql备份恢复
    Mysql5.7.33安装
    Networker oracle备份恢复
    Centos7 安装11.2.0.4
    spring security 自定义多种方式登录授权
    CentOS 7 安装Nginx 并配置自动启动
    Nginx 配置模板
    Alibaba cloud 版本说明
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054102.html
Copyright © 2011-2022 走看看