【发布时间】:2017-09-07 21:16:37
【问题描述】:
Spring bean 配置有两个主要问题: 1. 当我从应用程序上下文中检索 bean 时,我通过属性文件读取的属性没有持久化。 2. 我无法弄清楚如何将 bean 的值设置为另一个 bean - 在下面的示例中,我试图将 Plan bean 的 Metric 属性设置为某个 bean。
我有两个小类,一个 Metric 和一个更大的 Plan:
@Component
public class Metric {
@Value("${nameOfMetric}")
String name;
@Value("${empID}")
String empID;
@Value("${value:0.0}")
Double value;
}
还有一个更大的 Plan 对象,它具有三个不同的 Metrics 作为属性:
public class Plan {
public Metric hoursWorked;
public Metric monthlyDeals;
public Metric monthlyGoal;
...}
我还有一个正在读取的属性文件:
nameOfMetric = Untitled Metric
empID = Unknown
hoursWorked = 120.0
monthlyDeals = 40.0
monthlyGoal = 100.0
我有没有办法为每个指标(hoursWorked、monthlyDeals、monthlyGoal)创建 bean,然后将这些 bean 中的每一个注入到 Plan bean 中?到目前为止,我已经尝试使用带有 @Configuration 注释的 PropertyConfig 类:
@Inject
private Environment environment;
private Metric injectMetric(String propertyName){
Metric metric = new Metric();
metric.setEmpID(environment.getProperty("empID"));
metric.setName(propertyName);
metric.setValue(Double.parseDouble(environment.getProperty(propertyName)));
System.out.println("Metric injected: " + metric.toString());
return metric;
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean(name = {"hoursWorkedBean"})
@Scope("prototype")
public Metric hoursWorked() {
Metric metric = injectMetric("hoursWorked");
return metric;
}
但是当我尝试访问这个 bean 时,我在主应用程序中获得了默认值或 null 值,这表明这些属性没有持久化:
Metric hoursWorked = (Metric) ctx.getBean("hoursWorkedBean");
System.out.println(hoursWorked.getName()); // prints out "Untitled Metric", but should print out "hoursWorked"
【问题讨论】:
标签: java spring spring-mvc