自己写了一个Spring注解方式注入系统属性的test,成功注入自定义的系统属性。
Model类定义
package cn.lin.luo.tian.profile;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class SystemProp {
private String username;
private String password;
public SystemProp(@Value("#{systemProperties['username']}") String username,
@Value("#{systemProperties['password']}") String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
配置类定义
package cn.lin.luo.tian.profile;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@ComponentScan(basePackages = "cn.lin.luo.tian.profile")
public class ProfileConfiguration {
//如果是读取系统属性的话不需要注入这个bean
@Bean
public PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
测试类:
package cn.lin.luo.tian.profile;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import javax.annotation.Resource;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ProfileConfiguration.class)
@ActiveProfiles("pro")
public class ProfileTest {
@Resource(name = "getConfig")
public String config;
@Autowired
public SystemProp systemPro;
private static final String USERNAME = "Jack";
private static final String PASSWORD = "Rose";
@BeforeClass
public static void beforeClass() {
System.setProperty("username", USERNAME);
System.setProperty("password", PASSWORD);
}
// @Test
// public void configTest() {
// assertNotNull(config);
// System.out.println(config);
// }
@Test
public void spELTest() {
assertNotNull(systemPro);
assertEquals(USERNAME, systemPro.getUsername());
assertEquals(PASSWORD, systemPro.getPassword());
}
}
需要注意的是设置自定义系统属性username和password的时候需要在systemPro这个bean初始化前完成,所以在beforeClass方法中进行了属性值复制操作。