spring问题:不能列出具有@customannotation的属性

klsxnrf1  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(271)

当项目开始时,我们的想法是搜索所有带有@appproperty注解的de变量。
测试时,我不能得到列表,我总是得到一个空列表。我正在使用applicationcontext中的getbeanswithannotation()函数。我的理论是,在执行搜索时,它们还没有被加载,但我不能证实这是真的。
这是项目的开始,我使用@eventlistener在提升项目之后运行它。
乞讨形象
在那里调用applicationpropertyservice,我尝试获取包含@appproperty注解的所有属性的列表
服务形象
这是我想要呈现给我的两个属性。

public interface ApplicationProperties {

    @AppProperty( key = "version" , value ="1.0.0" , active = true)
    public String APP_VERSION = "version";

    @AppProperty( key = "checkVersion" , value = "true" , active = true)
    public String APP_CHECK_VERSION = "checkVersion";

}

@注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AppProperty {

    String key();

    String value() default "";

    boolean active() default false;

}
e4eetjau

e4eetjau1#

我认为你的代码有几个问题。
首先,正如你在 getBeansWithAnnotation 方法文档,它将仅检测类级注解:
查找其类具有提供的注解类型的所有bean,返回具有相应bean示例的bean名称的Map。
但是,您正试图将它们应用到一个类中,在该类中,只有字段被注解,并且定义了注解,并且只适用于字段级别—根据 @Target(ElementType.FIELD) -注解。
您应该创建一个适合应用于类型的新注解, @Target(ElementType.TYPE) ,并使用这个新注解应用spring需要标识的类。
另外,那个班级, ApplicationProperties 在您的示例中,应该使用允许spring找到它的东西进行注解。例如,你可以用, @Component , @Service ,等等,或者您可以定义…)或 ApplicationProperties 作为一个 @Bean 在应用程序上下文中的某个地方: getBeansWithAnnotation 将只向您提供有关springbeans的信息。
最后,spring提供了一个功能丰富的基于属性的配置系统 PropertySource 抽象和相关的东西。请阅读参考指南,这是关于这个主题的大量信息。

相关问题