繁体   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