当我们在使用 Spring 框架的注解时,会有两个注解@within
和@target
经常被使用到。这两个注解的作用都是用于匹配目标类上的注解,但它们的匹配方式略有差别。下面我将详细介绍它们的用法及区别。
@within
@within
注解用于匹配标注在目标类的注解,该注解的用法如下:
@within(com.example.MyAnnotation)
上述代码中,@within
注解用于匹配标记在类级别的MyAnnotation
注解。
例如,需要匹配@MyAnnotation
注解标记的所有类和接口,可以使用以下代码:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
@within(com.example.MyAnnotation)
public void myAdvice() {
// ...
}
使用@within
注解可以匹配如下类:
@MyAnnotation
public class MyClass {
}
@target
@target
注解也用于匹配标注在目标类的注解,用法和@within
略有不同:
@target(com.example.MyAnnotation)
上述代码中,@target
注解用于匹配标注在目标方法或目标类的注解。
例如,需要匹配@MyAnnotation
注解标记的所有类和接口中的所有方法,可以使用以下代码:
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
@target(com.example.MyAnnotation)
public void myAdvice() {
// ...
}
使用@target
注解可以匹配如下代码:
@MyAnnotation
public class MyClass {
@MyAnnotation
public void myMethod() {
// ...
}
}
区别
@within
和@target
都可以匹配标注在目标类的注解。两者的区别在于匹配的层级不同:
-
@within
注解只会匹配注解作用于类上的情况,不会匹配方法或属性上的。 -
@target
注解会匹配注解作用于方法或属性上,也会匹配作用于类上的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring中使用@within与@target的区别 - Python技术站