1

当我要求 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()
4

0 回答 0