3 回答
TA贡献1836条经验 获得超3个赞
Annotation
也可以获取自身的注解。@interface
是声明注解的关键字(与class/interface
一样)obj.getClass().getAnnotation(Configuration.class).getClass() == Configuration.class
引用不同结果为false
是正常情况。可以使用这种判断obj.getClass().getAnnotation(Configuration.class).getClass().getName().equals(Configuration.class.getName())
@Component
只是@Configuration
的注解声明,并不表示@Configuration
就是@Component
类型
另外上面这种用法叫Meta-Annotations
在 spring-4.1.x 之后的的版本都支持这个功能,可以自定义Annotation
,声明Meta-Annotations
即可拥有相对的功能。
beans-meta-annotations
Spring Annotation Programming Model
@ContextConfiguration
public @interface MyTestConfig {
@AliasFor(annotation = ContextConfiguration.class, attribute = "value")
String[] xmlFiles();
// ...
}
注:Meta-Annotations并不是Annotation的原生功能,只是在spring中实现了这种机制。如果单纯的使用原生的Annotation则需要自己解析Meta-Annotations实现相应的功能才行。
TA贡献1802条经验 获得超10个赞
我有一个对象被@Configuration注解,那我怎么知道它还是被Component注解的?
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component //<-这不是明摆着吗
public @interface Configuration {
String value() default "";
}
@Interface 和接口Annotation是什么关系?
没听懂
讲道理getAnnotation(xx)以后直接去判断应该就可以了吧
TA贡献1836条经验 获得超5个赞
楼上已经说过了,就不赘述了。
在 Annotation 的注释中第一句话就是:
The common interface extended by all annotation types.
即所有的注解类本质上都是继承了 `Annotation` 的接口。
xx.getAnnotation(AnnotationClass) 这种做法取出来的不是注释类实例,而是一个
Proxy
实例,所以它的class != AnnotationClass
。@Component
注解只是声明了@Configuration
这个注解本身,并不意味着后者继承了前者,所以结合2,只有class instanceof Annotation -> true
。
添加回答
举报