我有以下情况。
我有两个豆子,例如:
<bean id="service1" parent="txProxyTemplate">
<property name="target">
<bean autowire="byName" class="Class1"/>
</property>
</bean>
<bean name="manager1" parent="txProxyServiceTemplate">
<property name="target">
<bean autowire="byName" class="ManagerClass1"/
</property>
</bean>
我还有第三种豆,实际上是注入了这两种豆:
<bean name="supportBean" parent="txProxyServiceTemplate">
<property name="target">
<bean autowire="byName" class="SupportBeanClass">
</bean>
</property>
</bean>
bean的service1(路径=“第一路径”)和manager1(路径=“第二路径”)中都有字符串“ path”字段。
当将supportBean注入service1和manager1时,我希望supportBean中的某些字符串字段(例如“ actualPath”)是从两个封闭的bean中自动启动的。春天怎么办?
PS:我需要service1和manager1具有两个不同字段的supportBean(在service1类中,supportBean具有actualPath =“第一路径”,在manager1类中,supportBean具有actualPath =“第二路径)
希望您理解我,谢谢!
最佳答案
在没有看到任何实际代码的情况下,您是否无法在封闭的bean的setter中的actualPath
上设置SupportBean
? SupportBean
必须具有原型范围,以便可以维护单独的状态。
因此,例如,如果您的SupportBean
看起来像这样:
@Component
@Scope("prototype")
public class SupportBean {
private String actualPath;
public void setActualPath(String actualPath) {
this.actualPath = actualPath
}
}
然后,您可以在封闭的bean的setter中的
SupportBean
上设置实际路径。因此Service1
可能看起来像这样:@Service
public class Service1 {
private String path = "first path";
private SupportBean supportBean;
@Autowired
public void setSupportBean(SupportBean supportBean) {
this.supportBean = supportBean;
this.supportBean.setActualPath(this.path);
}
}
和
Manager1
像这样:@Service
public class Manager1 {
private String path = "second path";
private SupportBean supportBean;
@Autowired
public void setSupportBean(SupportBean supportBean) {
this.supportBean = supportBean;
this.supportBean.setActualPath(this.path);
}
}
如果您更愿意使用构造函数注入,则只需放下setter并自动装配构造函数即可:
@Service
public class Service1 {
private String path = "first path";
private SupportBean supportBean;
@Autowired
public Service1(SupportBean supportBean) {
this.supportBean = supportBean;
this.supportBean.setActualPath(this.path);
}
}
关于java - 从外部bean注入(inject)bean属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16774313/