0

我有以下情况。

我有两个豆子,例如:

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

我有第三个豆子,它真的被注入了这两个 baens:

<bean name="supportBean" parent="txProxyServiceTemplate">
   <property name="target">
      <bean autowire="byName" class="SupportBeanClass">
      </bean>
   </property>
</bean>

bean service1(path = "first path") 和 manager1 (path = "second path") 中有字符串 "path" 字段。当 supportBean 被注入到 service1 和 manager1 中时,我希望 supportBean 中的一些字符串字段(例如“actualPath”)是从两个封闭的 bean 自动启动的。我怎么能在春天做到这一点?

PS:我需要 service1 和 manager1 具有带有两个不同字段的 supportBean(在 service1 类中 supportBean 有actualPath =“第一路径”,在 manager1 类中 supportBean 有actualPath =“第二路径)

我希望你能理解我,谢谢!

4

1 回答 1

1

在没有看到任何实际代码的情况下,您不能在封闭 bean 的 setter 中设置actualPathon吗?需要有一个原型范围,以便可以维护单独的状态SupportBeanSupportBean

例如,如果你SupportBean看起来像这样:

@Component
@Scope("prototype")
public class SupportBean {

    private String actualPath;

    public void setActualPath(String actualPath) {
        this.actualPath = actualPath
    }
}

SupportBean然后你可以在封闭bean的setter中设置实际路径。所以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);
    }
}
于 2013-05-28T13:07:09.020 回答