我创建了一个如下对象:
serviceValidatorObject = ServiceFactory.getInstance().getServiceValidator()
该对象是通过调用静态方法getInstance()
创建的,然后是实例方法getServiceValidator()
。
我想使用Spring注入来配置它。
问题是ServiceFactory是我无法改变的遗留代码。
我知道Spring通过工厂类静态或实例方法支持注入,但无论如何我可以在Spring中配置上面的对象创建吗?
答案 0 :(得分:4)
<bean id="exampleBean"
factory-bean="myFactoryBean"
factory-method="createInstance"/>
在您的情况下,exampleBean是您的serviceValidatorObject
,工厂bean是serviceFactory
,工厂方法是getServiceValidator
。你也可能需要这个:
<bean id="serviceFactory"
factory-method="getInstance"/>
答案 1 :(得分:0)
您可以使用此bean定义:
<bean id="serviceValidatorObject" factory-bean="serviceFactory" factory-method="getServiceValidator"/>
<bean id="serviceFactory" class="<package>.ServiceFactory" />
答案 2 :(得分:0)
您应该能够使用以下方法实现这一目标:
<bean id="myCreatedObjectBean" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass">
<value>com.mycompany.MyFactoryClass</value>
</property>
<property name="targetMethod">
<value>myFactoryMethod</value>
</property>
</bean>
然后你可以使用@Resource或@Autowired + @Qualifier直接注入你的对象。
对于此示例,您的applicationContext.xml应包含:
<!-- this allows Spring to create an instance of your Factory -->
<bean id="serviceFactoryBean" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass">
<value>yourpackage.ServiceFactory</value>
</property>
<property name="targetMethod">
<value>getInstance</value>
</property>
</bean>
<!-- this allows Spring to use the factory instance to create the instance of ServiceValidator -->
<bean id="serviceValidatorBean" factory-bean="serviceFactoryBean" factory-method="getServiceValidator"/>
然后你可以通过以下方式注入你的代码:
@Resource(name = "serviceValidatorBean")
ServiceValidator serviceValidator;