Java Spring@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

我面临一个与Spring(而不是Spring boot)相关的开发问题。 在类中,我必须检索在属性文件(application.properties)上定义的属性的值。 因此,我使用@Value注释(通常很容易使用),但在我的情况下它不起作用。 在我的课堂上,我有以下代码:

@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提供的实例。