标签:col mys example 需要 str ddr mvc .config 集合
使用@Value注解注入配置在一些情况下是很笨重的,尤其是在多重配置或者垂直数据的情况下。Spring提供可选的方法,有力地归类配置到bean当中,以便管理和校验配置。
package com.example;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("foo")
public class FooProperties {
private boolean enabled;
private InetAddress remoteAddress;
private final Security security = new Security();
public boolean isEnabled() { ... }
public void setEnabled(boolean enabled) { ... }
public InetAddress getRemoteAddress() { ... }
public void setRemoteAddress(InetAddress remoteAddress) { ... }
public Security getSecurity() { ... }
public static class Security {
private String username;
private String password;
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
public String getUsername() { ... }
public void setUsername(String username) { ... }
public String getPassword() { ... }
public void setPassword(String password) { ... }
public List<String> getRoles() { ... }
public void setRoles(List<String> roles) { ... }
}
}
上面的POJO定义以下几个属性:
foo.enabled,默认false
foo.remote-address,可以从String强转的类型
foo.security.username,按某个规则确定的字符串
foo.security.password
foo.security.roles 一个String List
getter 和 setter 通常是必要的,绑定原理跟SpingMvc中数据绑定大致一样的,根据属性名绑定。但有时候也会setter也会被忽略的。
(1)Map,一开始初始化时候已经足够长了,因此只需要getter就行了。
(2)集合通常不用getter。
(3)如果一个普通POJO被初始化了,也不需要getter。
你还要通过@EnableConfigurationProperties注册属性类。
@Configuration
@EnableConfigurationProperties(FooProperties.class)
public class MyConfiguration {
}
当 @ConfigurationProperties 注解的bean注册之后,该bean将会有一个全名:<prefix>-<fqn>,<prefix>是@ConfigurationProperties注解中的prefix值,<fqn>是bean的类全名。如果该注解没有提供prefix,则只有类的全名,如foo-com.example.FooProperties
即使上面的配置创建了bean,我们要确定的是@ConfigurationProperties仅仅处理了Spring环境,特别是没从Context注入其他的Bean。@EnableConfigurationProperties注解同时会自动向应用提交申请,使得程序自动向环境中注入所有@ConfigurationProperties注解的Bena。你可以用快捷方式来保证FooProperties已经是个bean。
@Component
@ConfigurationProperties(prefix="foo")
public class FooProperties {
// ... see above
}
利用配置文件
# application.yml
foo:
remote-address: 192.168.1.1
security:
username: foo
roles:
- USER
- ADMIN
# additional configuration as required
也通过可以在代码中注入Bean来实现
@Service
public class MyService {
private final FooProperties properties;
@Autowired
public MyService(FooProperties properties) {
this.properties = properties;
}
//...
@PostConstruct
public void openConnection() {
Server server = new Server(this.properties.getRemoteAddress());
// ...
}
}
1、第三方配置
和@ConfigurationProperties一样,你可以使用@Bean,这在你绑定属性值到你不能控制的第三方组件的时候很有用的。
添加配置@ConfigurationProperties到相应的Bean上,可以把环境属性配置到Bean。
@ConfigurationProperties(prefix = "bar") @Bean public BarComponent barComponent() { ... }
任何配置在prefix=bar里面的属性都会映射到BarComponent对应的属性上。
标签:col mys example 需要 str ddr mvc .config 集合
原文地址:http://www.cnblogs.com/qins/p/7531157.html