[英]Spring - Dynamically Creating Beans from application.properties
[英]Injecting several Spring Beans of the same class using application.properties
我有一个由Spring驱动的安全测试。 我想创建一组测试用户(currentUser,anotherUser,adminUser等)。 用户的凭证将存储在application.properties中,如下所示:
test.currentUser.username=user1
test.currentUser.password=secret
test.adminUser.username=admin
test.adminUser.password=admin_password
...
有一个可以为用户构造对象的类。 看起来像这样:
@Component
public class UserObject{
public UserObject(
@Value("${test.currentUser.username}") String username,
@Value("${test.currentUser.password}") String password){
//Use username and password to do some authentication stuff
}
}
客户端测试类如下所示:
public class TestClass{
@Autowired
public TestClass(UserObject userObject){
}
}
如何更改上述类,以使Spring注入几个UserObject(并从application.properties文件中获取配置值)?
@ConfigurationProperties
@Getter
@Setter
@Configuration
public class Test {
Map<String, String> credentials;
}
@Configuration
public class TestCreate {
@Bean(name = "userList")
public List<UserObject> creteUser(Test test) {
List<UserObject> users = new ArrayList<>();
test.getCredentials().entrySet().forEach(entry -> {
UserObject user = new UserObject( entry.getKey(), entry.getValue());
users.add(user);
});
return users;
}
}
application.properties
credentials.user1=secret //user1 is key, secret is value
credentials.user2=someothersecret
现在,如果你这样做
@Autowired
List<UserObject> userList;
在任何弹簧组件中,您都能得到想要的。 希望能帮助到你
尝试这样的事情:
test:
users:
- user1,secret1
- user2,secret2
将被转换为以下属性:
test.users[0]={user1, secret1}
test.users[1]={user2, secret2}
@ConfigurationProperties(prefix="test")
public class Config {
private List<String[]> users= new ArrayList<String[]>();
public List<String[]> getUsers() {
return this.servers;
}
}
我没有尝试过,但是应该可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.