SpringBoot 使用Collections.singleton 过滤yml文件的值未生效
本帖最后由 ing 于 2019-7-15 09:08 编辑我想的结果应该是只有"User"被输出
实际输出结果 Roles:
这是因为什么?
第2张图的完整代码
@Component
@ConfigurationProperties(prefix = "acme")
public class AcmeProperties {
private boolean enabled;
private String remoteAddress;
private final Security security = new Security();
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getRemoteAddress() {
return remoteAddress;
}
public void setRemoteAddress(String remoteAddress) {
this.remoteAddress = remoteAddress;
}
public Security getSecurity() {
return security;
}
public static class Security{
private String username;
private String password;
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
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;
}
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
}
}
参考https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties ArrayList 的这个构造
实际上 是把singleList 遍历扔到 arrayList 中
而在SpringBoot 配置注入的时候 arrayList 以及有俩值了,
代码不全。。。。看不到怎么解析的{:17_1062:} 维C糖果 发表于 2019-7-15 08:23
代码不全。。。。看不到怎么解析的
补上输出的图了 你把 new ArrayList<>(Collections.singleton("USER")); 中的 USER 换成 GUEST 试试就明白了。
另外 Collections.singleton("USER") 返回的是一个 SingletonSet , 这个 Set 中只有一个元素,而不是 List 只有一个元素。 本帖最后由 浅唱、聆听 于 2019-7-15 09:11 编辑
你可以先看看在构造时
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
用这里的Collections.singleton("USER")单独声明一个变量 看看有什么元素在里面 是因为admin有ADMIN和USER的权限?所以被打印出来了?我瞎猜的 配置文件里面的Roles,把USER,ADMIN改成什么值,输出的就是什么值 Vvvvvoid 发表于 2019-7-15 09:31
ArrayList 的这个构造
实际上 是把singleList 遍历扔到 arrayList 中
而在SpringBoot 配置注入的时候 ar ...
把singleList 遍历扔到 arrayList 中赋值的话不应该是只有一个值吗?虽然程序执行后确实是2个但我有点不理解 Vvvvvoid 发表于 2019-7-15 09:31
ArrayList 的这个构造
实际上 是把singleList 遍历扔到 arrayList 中
而在SpringBoot 配置注入的时候 ar ...
这是我对
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
执行顺序的理解
Collections.singleton("USER")>new ArrayList<>()
由于singleton的值只有一个
所以new ArrayList执行的时候也只有一个。。。
页:
[1]
2