当我要求 spring 应用程序上下文给我应用程序的主类时,使用applicationContext.getBeansWithAnnotation(...)
,我只能访问两个类注释:
@SpringBootApplication
@EnableJpaRepositories
因此,如果我要求带有注释的 bean @EntityScan
,spring 上下文正确地给了我主类,但我无法访问@EntityScan
注释,就好像它不存在一样。
为什么 ?
主班
@SpringBootApplication(scanBasePackages = "foo")
@EnableJpaRepositories(basePackages = "foo.repository", repositoryBaseClass = AppRepositoryImpl.class)
@EntityScan(basePackages = "foo.entity") // Spring annotation -> I don't see it
@MiscScan(basePackages = "foo.misc") // My own annotation -> I don't see it
public class APIApplication {
public static void main(String[] args) {
SpringApplication.run(APIApplication.class, args);
}
}
从 Spring 应用程序上下文中检索主类
// I can search the main class using any of the 4 aforementioned annotations, it does not matter.
applicationContext.getBeansWithAnnotation(EntityScan.class).values().iterator().next().getClass().getAnnotations()
注意 :
- 更改注释的顺序并不重要。
APIApplication.class.getAnnotations()
正确地给我所有的注释。
编辑:该课程由 spring 代理,因此获取真正的课程和我必须这样做的所有注释:
applicationContext.getBeansWithAnnotation(EntityScan.class).values().iterator().next().getClass().getSuperclass().getAnnotations()