您的位置:首页 > 其它

FieldRetrievingFactoryBean

2016-03-29 10:50 288 查看


FieldRetrievingFactoryBean

spring提供了filed的值注入和method的返回值注入。

1、Field值的注入

filed值注入需要使用org.springframework.beans.factory.config.FieldRetrievingFactoryBean来获取类的静态变量。

例如,我们通常在接口中定义常量:

view plaincopy to clipboardprint?package com.baobaotao.fb;

public interface CarBrandType {

String HONG_QI = "红旗";

String JI_LI = "吉利";

}

package com.baobaotao.fb;

public interface CarBrandType {

String HONG_QI = "红旗";

String JI_LI = "吉利";

}

下面利用FieldRetrievingFactoryBean获取CarBandType接口中定义的常量,并注入到某个bean的属性中:

view plaincopy to clipboardprint?<bean id="car" class="com.baobaotao.fb.Car">

<property name="brand" ref="hongQi"/>

</bean>

<bean id="hongQi" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"

<property name="staticField" value="com.baobaotao.fb.CarBrandType.HONG_QI"/>

</bean>

<bean id="car" class="com.baobaotao.fb.Car">

<property name="brand" ref="hongQi"/>

</bean>

<bean id="hongQi" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"

<property name="staticField" value="com.baobaotao.fb.CarBrandType.HONG_QI"/>

</bean>

Spring还允许用户用常量的全限定名作为FieldRetrievingFactoryBean的id,其效果和通过配置staticField属性是一样的:

view plaincopy to clipboardprint?<bean id="car" class="com.baobaotao.fb.Car">

<property name="brand" ref="com.baobaotao.fb.CarBrandType.HONG_QI"/>

</bean>

<bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />

<bean id="car" class="com.baobaotao.fb.Car">

<property name="brand" ref="com.baobaotao.fb.CarBrandType.HONG_QI"/>

</bean>

<bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />

当然,也可以直接将FieldRetrievingFactoryBean以内置bean的方式对brand属性进行赋值,这样在配置上更紧凑一些:

view plaincopy to clipboardprint?<bean id="car" class="com.baobaotao.fb.Car">

<property name="brand">

<bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">

</bean>

</property>

</bean>

<bean id="car" class="com.baobaotao.fb.Car">

<property name="brand">

<bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">

</bean>

</property>

</bean>

2、Method返回值的注入

Method返回值的注入需要使用MethodInvokingFactoryBean来完成。

在xml配置中,需要设定targetObject和targetMethod来指定目标bean和方法。如果使用静态方法,则需要指定targetClass和targetMethod

配置文件如下:

view plaincopy to clipboardprint?<bean id="bdog" class="com.baobaotao.fb.Dog">

<property name="age">

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">

<property name="targetObject">

<ref local="randomAge"/>

</property>

<property name="targetMethod">

<value>getAge</value>

</property>

</bean>

</property>

</bean>

<bean id="randomAge" class="com.baobaotao.fd.RandomAge" />

<bean id="bdog" class="com.baobaotao.fb.Dog">

<property name="age">

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">

<property name="targetObject">

<ref local="randomAge"/>

</property>

<property name="targetMethod">

<value>getAge</value>

</property>

</bean>

</property>

</bean>

<bean id="randomAge" class="com.baobaotao.fd.RandomAge" />

对于静态方法:

view plaincopy to clipboardprint?<bean id="bdog" class="com.baobaotao.fb.Dog">

<property name="age">

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">

<property name="targetClass">

<value>com.baobaotao.fb.RandomAge</value>

</property>

<property name="targetMethod">

<!-- getAge必须是静态方法 -->

<value>getAges</value>

</property>

</bean>

</property>

</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: