β

Spring 开发之MethodInvokingFactoryBean学习

石头儿 409 阅读
最近接触基于Spring的项目,发现机会每个Spring XML配置中,几乎都有MethodInvokingFactoryBean,但来出来学习下。 用来做什么 通过MethodInvokingFactory Bean类,可注入方法返回值。 MethodInvokingFactoryBean用来获得某个方法的返回值,该方法既可以是静态方法,也可以是实例方法。该方法的返回值可以注入bean实例属性,也可以直接定义成bean实例。 代码示例 获取静态方法返回值,直接定义成bean实例,XML配置 [xml highlight="2-4,7"] <beans ...> <bean id="sysProps" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass"> <value>java.lang.System</value> </property> <property name="targetMethod"> <value>getProperties</value> </property> </bean> </beans> [/xml] Java 执行代码 [java] package cn.shitouer.spring.context; import java.util.Properties; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Context1 { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("cn.shitouer.springtest.xml"); Properties sysProps = (Properties) ctx.getBean("sysProps"); System.out.println("Java version is " + sysProps.get("java.version")); } } [/java] 执行如下 [shell] Java version is 1.7.0_45 [/shell] 使用静态方法(static method)注入时需要指定如下两个属性:
  1. targetClass: 确定目标 class。
  2. targetMethod: 确定目标方法,确定通过目标 bean 的哪个方法返回值注入。
使用bean 实例的方法(instance method)返回值注入,通过 MethodInvokingFactoryBean 完成,但必须指定以下两个属性。
  1. targetObject: 确定目标 bean,该 bean 可以是容器中己有的 bean,也可是嵌套 bean。
  2. targetMethod: 确定目标方法,确定通过目标 bean 的哪个方法返回值注入。
引用如上生成的bean实例,注入site属性新生成的bean实例,XML如下 [xml highlight="3-4,6-7,9,11"] <beans ...> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject"> <ref local="sysProps" /> </property> <property name="targetMethod"> <value>putAll</value> </property> <property name="arguments"> <props> <prop key="site">http://www.shitouer.cn/</prop> </props> </property> </bean> </beans> [/xml] Java代码 [java] package cn.shitouer.spring.context; import java.util.Properties; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Context1 { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("cn.shitouer.springtest.xml"); Properties sysProps = (Properties) ctx.getBean("sysProps"); System.out.println("Java version is " + sysProps.get("java.version")); System.out.println("This article is Reprinted from " + sysProps.get("site")); } } [/java]                                                                                                          
作者:石头儿
年少轻狂 幸福时光--http://www.shitouer.cn/
原文地址:Spring 开发之MethodInvokingFactoryBean学习, 感谢原作者分享。

发表评论