我当前的项目使用属性文件(经典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...)
方法。我基本上创建了一个工厂服务,在url
,username
和password
(在简化示例版本中)返回正在运行的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;