使用工厂参数替换属性

时间:2017-08-28 11:52:22

标签: java spring

我当前的项目使用属性文件(经典PropertyResolver)中配置的属性定义Spring bean。

实施例

<bean id="timestampService" class="org.acme.rfc3161.TimestampServiceImpl">
  <property name="url" value="${serverUrl:https://.....}" />
  <property name="username" value="${username}" />
  <property name="password" value="${password}" />
  <property name="someOtherBean">
    <bean >...
    </bean>
</bean>

好的,这基本上定义了一个集中配置的单件服务。

但是,我的新实现需要实例化属于不同帐户的多个服务。当然不是通过@Autowired,而是通过getBean(String,Object...)方法。我基本上创建了一个工厂服务,在urlusernamepassword(在简化示例版本中)返回正在运行的RFC3161客户端,而不是单例客户端。

示例电话

TimestampService srv = (TimestampService) beanFactory.getBean("timestampService",serverUrl,username,password);

我现在想了解如何将这些参数映射到XML中。我目前无法通过TimestampServiceImpl编辑org.acme,因为我无法重新编译并重新发布它。

所以我的问题是如何将构造函数参数/工厂参数绑定到Spring 4.3中的属性?我知道如何编写XML来将静态值或属性绑定到bean的Java构造函数参数,而不是如何将来自BeanFactory调用者的值绑定到目标bean的属性。因此,Spring XML定义包含一组部分字段,这些字段将在调用工厂时完成。

我目前可以做的是手动实例化对象。

TimestampServiceImpl ret = new TimestampServiceImpl();
ret.setUrl(url);
ret.setUsername(username);
ret.setPassowrd(password);

ret.setAdditionalSpringBean(beanFactory.get("anotherBean"));

ret.afterPropertiesSet();

return ret;

0 个答案:

没有答案