7.10.2 获取Field值
通过FieldRetrievingFactoryBean
类,可访问类的静态Field
值或对象的实例Field
值。FieldRetrieving Factory Bean
获得指定Field
的值之后,即可将获取的值注入其他Bean
,也可直接定义成新的Bean
使用FieldRetrievingFactoryBean
访问Field
值可分为两种情形:
如果要访问的Field
是静态Field
,则需要指定:
- 调用哪个类。由
FieldRetrievingFactoryBean
的setTarget Class( String targetClass
方法指定。 - 访问哪个
Field
。由FieldRetrievingFactoryBean
的setTargetField(String target Field)
方法指定。
如果要访问的Field
是实例Field
,则需要指定:
- 调用哪个对象。由
FieldRetrievingFactoryBean
的setTargetObject(Object targetObject)
方法指定。 - 访问哪个
Field
。由FieldRetrievingFactoryBean
的setTargetField(String targetField)
方法指定
常用的是访问静态的Field
对于FieldRetrievingFactoryBean
的第一种用法,与前面介绍FactoryBean
时自己开发的GetFieldFactoryBean
基本相同。对于FieldRetrievingFactoryBean
的第二种用法,在实际编程中几乎没多大用处,这是因为FieldRetrievingFactoryBean
则要求实例的Field
要以public
修饰,但是根据良好封装原则,Java
类的实例Field
应该用private
修饰,并使用getter
和setter
来访问和修改,这与FieldRetrievingFactoryBean
的要求矛盾。
程序示例
项目结构
1 | E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\FieldRetrievingFactoryBean |
下面配置用于将指定类的静态Field
定义成容器中的Bean
:
1 |
|
上面的XML
配置粗体字代码指定访问java.sql.Connection
的TRANSACTION_SERIALIZABLE
的值,并将该Fied
的值定义成容器中的the Agel bean
查阅JDK API
文档即可发现该Field
的值为8因此theAgel
的值就是8。
主程序部分访问theAge1
的代码如下。
1 | package lee; |
编译、运行该程序,将可看到如下输出:
1 | 系统获取theAge1的值:8 |
FieldRetrievingFactoryBean
还提供了一个setStaticField(String staticField)
方法,该方法可同时指定获取哪个类的哪个静态Field
值。因此上面的配置片段可简化为如下形式:
1 | <bean id="theAge2" |
使用FieldRetrievingFactory Bean
获取的Field
值既可定义成容器中的Bean
,也可被注入到其他Bean
中。例如如下配置。
1 | <bean id="son" class="org.crazyit.app.service.Son"> |
主程序使用如下代码来访问、输出容器中的son
:
1 | System.out.println("系统获取son为:" + ctx.getBean("son")); |
程序的执行结果如下:
1 | 系统获取son为:Son[age= 8] |
从程序输出可以看出,son
的age
成员变量的值,等于java.sql.Connection
接口中TRANSACTIONSERIALIZABLE
的值。在上面定义中,定义FieldRetrievingFactoryBean
工厂Bean
时指定的id
属性,并不是该工厂Bean
实例的唯一标识,而是用来指定Field
的表达式。
util:constant元素
util:
命名空间下的<util:constant>
元素可作为FieldRetrievingFactoryBean
访问静态Field
的简化配置,使用该元素时可指定如下两个属性。
属性 | 描述 |
---|---|
id |
该属性指定将静态Field 的值定义成名为id 的Bean 实例。 |
static-field |
该属性指定访问哪个类的哪个静态Field |
上面的theAge1
、 theAge2
可简化为如下配置:
1 | <util:constant id="theAge1" |
上面的son Bean
可简化为如下配置:
1 | <bean id="son" class="org.crazyit.app.service.Son"> |
原文链接: 7.10.2 获取Field值