不能@Autowire配置
Cannot @Autowire configuration
我对 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);
}
}
非常感谢。
尝试用这些注释您的测试 class:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestConfiguration.class})
[编辑]抱歉,我没有看到 OP 在使用 TestNG。重点还是Spring没有自举导致的问题。在 TestNG 中,可以通过扩展 AbstractTestNGSpringContextTests
.
来完成
确保在您的配置中声明可以解析@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 注释的 class 中冗余地声明此 bean,但这会很糟糕 practice/style,因为它会在每个新声明中不断覆盖该 bean。相反,将这个 bean 放在最顶层的配置中,它使用 @Value 导入其他配置,你可以从一个地方回收 PropertySourcesPlaceholderConfigurer bean。
我对 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);
}
}
非常感谢。
尝试用这些注释您的测试 class:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestConfiguration.class})
[编辑]抱歉,我没有看到 OP 在使用 TestNG。重点还是Spring没有自举导致的问题。在 TestNG 中,可以通过扩展 AbstractTestNGSpringContextTests
.
确保在您的配置中声明可以解析@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 注释的 class 中冗余地声明此 bean,但这会很糟糕 practice/style,因为它会在每个新声明中不断覆盖该 bean。相反,将这个 bean 放在最顶层的配置中,它使用 @Value 导入其他配置,你可以从一个地方回收 PropertySourcesPlaceholderConfigurer bean。