Java Spring@Value始终返回空值
我面临一个与Spring(而不是Spring boot)相关的开发问题。 在类中,我必须检索在属性文件(application.properties)上定义的属性的值。 因此,我使用@Value注释(通常很容易使用),但在我的情况下它不起作用。 在我的课堂上,我有以下代码:Java Spring@Value始终返回空值,java,spring,Java,Spring,我面临一个与Spring(而不是Spring boot)相关的开发问题。 在类中,我必须检索在属性文件(application.properties)上定义的属性的值。 因此,我使用@Value注释(通常很容易使用),但在我的情况下它不起作用。 在我的课堂上,我有以下代码: @Value("${value:'DefaultValue'}") private String myValue; 导入时:import org.springframework.beans.factor
@Value("${value:'DefaultValue'}")
private String myValue;
导入时:import org.springframework.beans.factory.annotation.Value代码>
我的属性文件包含:value=a值
但是,当我想测试我的应用程序时,我总是收到一个空值(也使用默认值)。
我尝试在我的类中添加无差异注释,如
@Component
你有什么建议吗?我很确定我错过了某个配置,但我不知道是什么
提前谢谢
Tigrou使用@Value
注释的每个类都必须是spring管理的bean。您可以通过添加@Component
注释来实现这一点,但是请确保您已经在java配置中配置了组件扫描@ComponentScan(basePackages=“your.package”)
,这样spring就知道在哪里搜索组件了。最后,在这里的每个人的帮助下(特别感谢@M.Deinum我解决了我的问题
因此,首先要做的是,用Spring测试依赖项替换Junit依赖项(use)。
其次,我已经用以下几行代码更新了要用Spring执行的测试:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {AppConfig.class})
这足以检索@value字段的默认值。
要检索我必须添加的值
@PropertySource("classpath:application.properties")
在我的AppConfig类中确保spring正确扫描(加载)了您的类?您并不是自己实例化对象,是不是oyu?@zXor我一点也不确定,但当我添加以下注释组件ComponentScan Configuration PropertySource(“application.properties”)时我认为让spring扫描类就足够了?还是我错了?如果它是null
,您可以使用new MyObject()
自己创建一个对象实例(@Component
注释并不重要,因为您仍然在spring范围之外创建一个新实例)或者您尚未在应用程序中配置属性资源占位符配置器。@M.Deinum我在另一个类中有一个属性资源占位符配置器:@Bean公共静态属性资源占位符配置器属性资源占位符配置器(){PropertySourcesPlaceholderConfigurer configurer=new PropertySourcesPlaceholderConfigurer();configurer.setIgnoreResourceNotFound(true);configurer.SetIgnoreUnsolvablePlaceholders(true);返回configurer;}
无论如何,即使使用@组件
(如果使用新建YourClass()
它也不起作用。你要给它添加多少注释。Spring没有意识到通过构造函数的任意创建。它违反了控制反转原则,因为bean的创建、注入和销毁由ioc容器管理,而不是由开发人员直接管理。请阅读我的评论……这不会像他那样有帮助自己创建一个新实例,而不是使用spring提供的实例。