目录
Spring自定义注解
1、在spring.xml中配置信息
(此配置是SpringAOP切面的配置,如果已经引入SpringAOP则可以不用再添加)
<aop:aspectj-autoproxy proxy-target-class="true" />
2、自定义一个注解
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface MyAnno {
//注解传递的参数,可不加
String param();
}
3、定义一个增强类(切面),来实现注解的功能
import com.xxx.anno.MyAnno;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class MyInterceptor {
@Before(value = "execution(public * com.xxx.controller.*Controller.*()) && @annotation(myAnno)")
public void proceed(MyAnno myAnno) throws Throwable {
System.out.println("***********************");
System.out.println(myAnno.param());
}
}
4、测试
import com.xxx.anno.MyAnno;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author JngKang
* @date 2022-05-27 10:32
*/
@RestController
@RequestMapping("/test")
public class TestController {
@ResponseBody
@GetMapping("/fun1")
@MyAnno(param = "123")
public String fun1() {
return "ok";
}
}
接口被访问后,控制台打印: