我是TestNG,Spring框架等的新手,我正试图通过@Value
注释使用注释@Configuration
访问配置文件。
我试图在这里实现的是让控制台从配置文件写出“hi”,通过@Value
访问值。我必须明显忽略@Value
注释(或@Autowired
或其他一些注释)的全部要点,因为我所得到的只是java.lang.NullPointerException
。
我有以下三个文件(减少到绝对最小值):
config.properties
a="hi"
TestConfiguration.java
@Configuration
@PropertySource("config.properties")
public class TestConfiguration {
@Value("${a}")
public String A;
}
TrialTest.java
public class TrialTest {
@Autowired
private TestConfiguration testConfiguration;
@Test
public void test() {
System.out.println(testConfiguration.A);
}
}
非常感谢。
答案 0 :(得分:2)
尝试使用以下方法注释您的测试类:
<德尔> @RunWith(SpringJUnit4ClassRunner.class)来德尔>
@ContextConfiguration(classes={TestConfiguration.class})
[编辑]抱歉,我没有看到OP正在使用TestNG。关键点仍然是问题是由Spring没有引导引起的。在TestNG中,可以通过扩展AbstractTestNGSpringContextTests
来完成。
答案 1 :(得分:0)
确保在配置中声明可以解析@Value表达式的PropertySourcesPlaceholderConfigurer bean。声明这个bean:
@Configuration
@PropertySource("config.properties")
public class TestConfiguration {
@Value("${a}")
public String A;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer()
{
return new PropertySourcesPlaceholderConfigurer();
}
}
请注意,您不必对此bean执行任何操作,只需声明它,它将允许@Value注释表达式按预期工作。
你可以在每个使用@Value注释的类中冗余地声明这个bean,但这将是不好的练习/样式,因为它会在每个新声明中覆盖bean。相反,将此bean放在使用@Value导入其他配置的最顶层配置中,您可以从一个地方回收PropertySourcesPlaceholderConfigurer bean。