繁体   English   中英

使用application.properties注入相同类的多个Spring Bean

[英]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;
    }
}

24.6.1加载YAML

我没有尝试过,但是应该可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM