zoukankan      html  css  js  c++  java
  • 运用Aop自定义注解

    1、建一个注解接口类MyNote

    package com.xiangwen.test.mynote;
    
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    import java.lang.annotation.Documented;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    @Documented
    @Retention(RUNTIME)
    @Target(METHOD)
    /**
     * 自定义注解
     */
    public @interface MyNote {
    }
    

    2、定义一个切面类MyNoteImpl

    package com.xiangwen.test.mynote;
    
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    /**
     * <h5>描述:通过@Aspect注解使该类成为切面类</h5>
     */
    @Aspect
    @Component
    public class MyNoteImpl {
        @Pointcut("@annotation(com.xiangwen.test.mynote.MyNote)")
        private void cut() {
        }
    
        /**
         * <h5>功能:前置通知</h5>
         */
        @Before("cut()")
        public void before() {
            System.out.println("自定义注解生效了");
        }
    }

    3、建一个扫包类AppConfig

    package com.xiangwen.test.mynote;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    
    @Configuration
    @ComponentScan( "com.xiangwen.test.mynote")
    @EnableAspectJAutoProxy(proxyTargetClass = true)
    public class AppConfig {
    }

    4、建一个测试类加上自定义注解

    package com.xiangwen.test.mynote;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class Car {
        @MyNote//自定义注解
        public void running(){
            System.out.println("汽车跑起来了");
        }
    }

    5、运行

    package com.xiangwen.test.mynote;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class AppTest {
        @Test
        public void test1(){
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
            Car car = context.getBean("car",Car.class);
            car.running();
        }
    }

    6、结果

  • 相关阅读:
    sql-server数据库中利用触发器实现表与表之间的级联删除
    求任意长度数组的最大值(整数类型)。利用params参数实现任意长度的改变。
    params参数的调用
    C# 参考之方法参数关键字:params、ref及out
    写一个方法求数组中的最大值,最小值,总和以及平均值。
    写一个方法来解析一元二次方程。
    创建一个方法来判断是否为闰年。。
    构造方法
    总结重写和重载区别
    DelegatingActionProxy
  • 原文地址:https://www.cnblogs.com/wenwenzuiniucha/p/14808916.html
Copyright © 2011-2022 走看看