运用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、结果

原文地址:https://www.cnblogs.com/wenwenzuiniucha/p/14808916.html