[英]Inject bean property from outer bean
我有以下情況。
我有兩個豆子,例如:
<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 =“第二路徑)
希望您理解我,謝謝!
而不必看到任何實際的代碼,你能不能設置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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.