spring开发 MethodInvokingFactoryBean的学习

来源:互联网 发布:pi数据库 edna 编辑:程序博客网 时间:2024/05/21 15:04
通过MethodInvokingFactoryBean工厂Bean,可以将指定方法返回值注入成为目标Bean的属性值,MethodInvokingFactoryBean用来获得指定方法的返回值,该方法可以是静态方法 
也可以是实例方法。 
获得的方法返回值既可以被注入到指定Bean实例的指定属性,也可以直接定义成Bean实例。 


可以注入到静态方法:如:
Java代码  收藏代码
  1. <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  2.         <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager" />  
  3.         <property name="arguments" ref="securityManager" />  
  4.     </bean>  


也可以是普通方法 
举例: 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="GBK"?>  
  2.      <!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->  
  3.  <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.      xmlns="http://www.springframework.org/schema/beans"  
  5.      xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  7.      <!-- 定义目标Bean,后面将会获取该Bean的方法返回值 -->  
  8.      <bean id="valueGenerator" class="com.b510.app.util.ValueGenerator"></bean>  
  9.      <!-- 定义dog1的bean -->  
  10.      <bean id="dog1" class="com.b510.service.impl.DogServiceBean">  
  11.          <property name="age">  
  12.              <bean  
  13.                  class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  14.                  <!-- targetObject确定目标Bean,指定调用哪个Bean -->  
  15.                  <property name="targetObject" ref="valueGenerator" />  
  16.                  <!-- targetMethod确定目标方法,指定调用目标Bean的哪个方法 -->  
  17.                  <property name="targetMethod" value="getAgeValue" />  
  18.              </bean>  
  19.          </property>  
  20.      </bean>  
  21.      <!-- 定义名为dog2的Bean -->  
  22.      <bean id="dog2" class="com.b510.service.impl.DogServiceBean">  
  23.          <property name="age">  
  24.              <bean  
  25.                  class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  26.                  <!-- targetClass确定目标类,指定调用哪个类 -->  
  27.                  <property name="targetClass" value="com.b510.app.util.ValueGenerator" />  
  28.                  <!-- targetMethod确定目标方法,指定调用目标class的哪个方法。   
  29.                      该方法必须是静态方法-->  
  30.                  <property name="targetMethod" value="getAgeStaticValue"></property>  
  31.              </bean>  
  32.          </property>  
  33.      </bean>  
  34.    
  35.    
  36.      <!--  将静态方法返回值直接定义成Bean -->  
  37.      <bean id="sysProps"  
  38.          class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  39.          <!-- targetClass确定目标类,确定调用哪个类 -->  
  40.          <property name="targetClass" value="java.lang.System" />  
  41.          <!-- targetMethod确定目标方法,确定调用目标class的哪个方法   
  42.              该方法必须是静态方法-->  
  43.          <property name="targetMethod" value="getProperties" />  
  44.      </bean>  
  45.      <!-- 将实例方法返回值直接定义成Bean -->  
  46.      <bean id="javaVersion"  
  47.          class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
  48.          <!-- targetObject确定目标Bean,确定调用哪个Bean -->  
  49.          <property name="targetObject" ref="sysProps" />  
  50.          <!-- targetMethod确定目标方法,确定调用目标Bean的哪个方法 -->  
  51.          <property name="targetMethod" value="getProperty" />  
  52.          <!-- 确定调用目标方法的参数 -->  
  53.          <property name="arguments">  
  54.              <!-- list元素列出调用方法多个参数值 -->  
  55.              <list>  
  56.                  <value>java.version</value>  
  57.              </list>  
  58.          </property>  
  59.      </bean>  
  60.  </beans>  
转载 :http://huangyunbin.iteye.com/blog/1560107
0 0
原创粉丝点击