簡體   English   中英

從外部bean注入bean屬性

[英]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 =“第二路徑)

希望您理解我,謝謝!

而不必看到任何實際的代碼,你能不能設置actualPathSupportBean在封閉豆的制定者? 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM