Spring加载ConfigurationProperties的典型应用是自动加载(Autowired),在一些特殊的场景需要手动修改加载的Property属性。
代码实例,config类
importjava.util.ArrayList; importjava.util.List; importorg.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix="devices") public classDeviceConfig { private List<String> imports = new ArrayList<String>(); private List<DeviceDetailsProperties> definitions = new ArrayList<DeviceDetailsProperties>(); public List<String>getImports() { return this.imports; } public List<DeviceDetailsProperties>getDefinitions() { returndefinitions; } public void setImports(List<String>imports) { this.imports =imports; } public void setDefinitions(List<DeviceDetailsProperties>definitions) { this.definitions =definitions; } }
DeviceConfig类代码用到的DeviceDetailsProperties,测试演示只有id
public classDeviceDetailsProperties { String id; publicString getId() { returnid; } public voidsetId(String id) { this.id =id; } @Override publicString toString() { returnid; } }
importjava.util.Properties; importorg.springframework.boot.bind.PropertiesConfigurationFactory; public classTest { public static void main(String[] args) throwsException { Properties props = newProperties(); props.put("devices.imports[0]","imp1"); props.put("devices.imports[1]","imp2"); props.put("devices.definitions[0].id","first"); props.put("devices.definitions[1].id", "second"); DeviceConfig conf = newDeviceConfig(); PropertiesConfigurationFactory<DeviceConfig> pcf = new PropertiesConfigurationFactory<DeviceConfig>(conf); pcf.setProperties(props); pcf.setTargetName("devices"); conf =pcf.getObject(); System.out.println(conf.getImports()); System.out.println(conf.getDefinitions()); } }
运行结果: