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