2011-09-19 41 views
2

我有一个对象创建为称为一个实例创建的对象如下:弹簧注入使用从一个静态方法

serviceValidatorObject = ServiceFactory.getInstance().getServiceValidator() 

对象从静态方法,getInstance(),然后一个实例方法,getServiceValidator()一个呼叫建立。

我想用Spring注入来配置它。

问题是ServiceFactory是我无法更改的遗留代码。

我知道Spring支持通过工厂类的静态或实例方法注入,但无论如何,我可以在上面配置Spring对象吗?

回答

2
<bean id="exampleBean" 
     factory-bean="myFactoryBean" 
     factory-method="createInstance"/> 

在你的情况,叫exampleBean是你serviceValidatorObject,工厂bean是serviceFactory,工厂法是getServiceValidator。你可能需要这个,太:

<bean id="serviceFactory" 
     factory-method="getInstance"/> 
0

你可以使用这个bean定义:

<bean id="serviceValidatorObject" factory-bean="serviceFactory" factory-method="getServiceValidator"/> 
<bean id="serviceFactory" class="<package>.ServiceFactory" /> 
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;