0

我对TestNG、Spring框架等完全陌生,我正在尝试通过注释使用注释@Value访问配置文件@Configuration

我在这里想要实现的只是让控制台从配置文件中写出“hi”,通过@Value. 我显然错过了@Value注释(或@Autowired其他一些注释)的全部要点,因为我得到的只是java.lang.NullPointerException.

我有以下三个文件(减少到绝对最小值):

配置属性

a="hi"

测试配置.java

@Configuration
@PropertySource("config.properties")
public class TestConfiguration {
    @Value("${a}")
    public String A;
}

试用测试.java

public class TrialTest {
    @Autowired
    private TestConfiguration testConfiguration;

    @Test
    public void test() {
        System.out.println(testConfiguration.A);
   }
}

非常感谢。

4

2 回答 2

2

尝试使用这些注释您的测试类:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes={TestConfiguration.class})

[编辑] 抱歉,我没有看到 OP 正在使用 TestNG。关键仍然是问题是由于 Spring 没有被引导引起的。在 TestNG 中,可以通过扩展来完成AbstractTestNGSpringContextTests

于 2017-07-24T18:05:20.330 回答
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。

于 2017-07-24T18:15:22.447 回答