如何检查其他注释包含哪些注释

时间:2017-01-06 09:03:56

标签: java spring annotations

我们知道有注释会自动包含其他注释 你能否告诉我如何检查@EnableAutoConfiguration是否包含(这意味着增加了内容)@EnableTransactionManagement

提前致谢, 此致

3 个答案:

答案 0 :(得分:0)

我认为你可以这样做:

 ClassPathScanningCandidateComponentProvider scanner =
                    new ClassPathScanningCandidateComponentProvider(false);
            scanner.addIncludeFilter(new AnnotationTypeFilter(EnableAutoConfiguration.class));
                for(BeanDefinition bean:scanner.findCandidateComponents("PACKAGES TO SCAN")){

                Class<?> aClass=Class.forName(bean.getBeanClassName()); 
`// you can also use aClass.getAnnotatedInterfaces() to find the other` annotations     
                if(aClass != null && aClass.isAnnotationPresent(EnableTransactionManagement.class)){
                    System.out.println(" Found "+aClass.getName());                         
                }       
            }

答案 1 :(得分:0)

Spring Boot可以为您提供它创建的所有bean的列表,以及有关它选择包含/排除它们的原因的一些信息。只需设置属性debug=true并在启动时观察记录的输出。此视频演示了这一点:https://www.youtube.com/watch?v=Sw7I70vjN0E&list=WL&t=615

我不知道它是否会专门打印出@Enable...注释,但这些注释通常只为某些配置提供@Import注释。查看@EnableTransactionManagement的来源,我看到了:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement {

如果你使用debug属性,Spring肯定会打印出它是否创建了一个TransactionManagementConfigurationSelector bean,它应该告诉你应用程序中是否使用了@EnableTransactionManagement

答案 2 :(得分:0)

spring-boot-autoconfigure- {whatever-is-ur-bootversion}的META-INF中有spring.factories .jar

打开spring.factories并查看 EnableAutoConfiguaration注释等于许多逗号分隔的配置文件。并根据您的初学者自动加载特定的配置文件。

您可以打开这些文件并进行评估。