无法@Autowire配置

时间:2017-07-24 17:57:15

标签: java selenium testng spring-framework-beans

我是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);
   }
}

非常感谢。

2 个答案:

答案 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。