我们有时候定义了一个bean,bean中的某个属性是另外一个bean的某个方法的返回值,这个时候我能就能用org.springframework.beans.factory.config.MethodInvokingFactoryBean这个工厂bean直接把那个返回值注入到那个属性当中去,网上有一些关于MethodInvokingFactoryBean的博文,但是例子里的方法都是没有参数的,我下面说如何配置调用有参的方法,很简单只需要配置arguments这个属性,废话不说,上例子
package com.spring.methodinvokingfactorybean;
public class Order {
private String usdAmount;
private String cnyAmount;
public String getUsdAmount() {
return usdAmount;
}
public void setUsdAmount(String usdAmount) {
this.usdAmount = usdAmount;
}
public String getCnyAmount() {
return cnyAmount;
}
public void setCnyAmount(String cnyAmount) {
this.cnyAmount = cnyAmount;
}
@Override
public String toString() {
return "Order [usdAmount=" + usdAmount + ", cnyAmount=" + cnyAmount
+ "]";
}
}
package com.spring.methodinvokingfactorybean;
public class AmountUtils {
public String getAmount(String currency) {
return 100 + currency;
}
}
package com.spring.methodinvokingfactorybean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
Order order = (Order) ctx.getBean("order");
System.out.println(order);
}
}
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="order" class="com.spring.methodinvokingfactorybean.Order"> <property name="usdAmount" ref="usdAmountUtils" /> <property name="cnyAmount" ref="cnyAmountUtils" /> </bean> <bean id="getAmountUtils" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" abstract="true"> <property name="targetObject" ref="amountUtils"/> <property name="targetMethod" value="getAmount"/> </bean> <bean id="usdAmountUtils" parent="getAmountUtils"> <property name="arguments"> <list> <value>USD</value> </list> </property> </bean> <bean id="cnyAmountUtils" parent="getAmountUtils"> <property name="arguments"> <list> <value>CNY</value> </list> </property> </bean> <bean id="amountUtils" class="com.spring.methodinvokingfactorybean.AmountUtils" /> </beans>