1、调用getter方法:使用PropertyPathFactoryBean。
- 调用哪个对象: setTargetObject
- 哪个getter方法: setPropertyPath(String propertyPath)
eg:
①beans.xml
②测试:
ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");
System.out.println(appContext.getBean("username"));
③测试结果:
④简化配置:
- getter:<util:property-path .../>
- setter:<util:properties/>
需要配置命名空间:
xmlns:util="http://www.springframework.org/schema/util"
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"
2、 访问类或对象的Field值:使用FieldRetrievingFactoryBean。
GetFieldFactoryBean即可获取静态field的值,也可获取实例field的值。(1)访问静态field:
- 调用哪个类: setTargetClass
- 哪个field: setTargetField
eg:
①beans.xml
<bean id = "getFieldBasic" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" abstract="true"/>
<bean id="val1" parent="getFieldBasic"
p:targetClass="java.sql.Connection"
p:targetField="TRANSACTION_SERIALIZABLE"
/>
②简化配置: <util:constant .../>
<util:constant id="v1" static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE"/>
(2)访问实例field: ————几乎没用。因为它要求被访问的实例field是public,否则会报错java.lang.NoSuchFieldException- 调用哪个对象: setTargetObject
- 哪个field: setTargetField
eg:
①beans.xml
<bean id="puppy" class="cony.domain.Puppy" p:kind="秋田"/>
<bean id="puppyKind" parent="getFieldBasic"
p:targetObject-ref="puppy"
p:targetField="kind"
/>
无简化配置
3、调用普通方法:使用MethodInvokingFactoryBean。
- 调用哪个类: setTargetClass
- 哪个方法: setTargetMethod
- 传参数: setArguments(Object[] args);
②访问实例方法
- 调用哪个对象: setTargetObject
- 哪个方法: setTargetMethod
- 传参数: setArguments(Object[] args);
eg:实现一个带有两个按钮和一个文本框的窗口
<!-- JFrame mainWin = new JFrame("我的窗口"); -->
<bean id="mainWin" class="javax.swing.JFrame"
c:_0="我的窗口"
p:visible="true"
/>
<!-- JTextArea jta = new JTextArea(9 ,60); -->
<bean id="jta" class="javax.swing.JTextArea"
c:_0="9"
c:_1="60"
/>
<!--mainWin.add( new JScrollPane(jta) );(使用嵌套bean) -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="mainWin"
p:targetMethod="add">
<property name="arguments">
<list>
<bean class="javax.swing.JScrollPane"
c:_0-ref="jta"
/>
</list>
</property>
</bean>
<!-- JPanel jp = new JPanel(); -->
<bean id="jp" class="javax.swing.JPanel"/>
<!-- mainWin.add(jp , BorderLayout.SOUTH); -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="mainWin"
p:targetMethod="add"
>
<property name="arguments">
<list>
<ref bean="jp"/>
<util:constant static-field="java.awt.BorderLayout.SOUTH"/>
</list>
</property>
</bean>
<!-- JButton okBn = new JButton("确定"); -->
<bean id="okBn" class="javax.swing.JButton"
c:_0="确定"
/>
<!-- jp.add(okBn); -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="jp"
p:targetMethod="add"
>
<property name="arguments">
<list>
<ref bean="okBn"/>
</list>
</property>
</bean>
<!-- JButton cancelBn = new JButton("取消"); -->
<bean id="cancelBn" class="javax.swing.JButton" c:_0="取消"/>
<!-- jp.add(cancelBn); -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="jp"
p:targetMethod="add"
>
<property name="arguments">
<list>
<ref bean="cancelBn"/>
</list>
</property>
</bean>
<!-- mainWin.pack();-->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject-ref="mainWin"
p:targetMethod="pack"
/>
util简化集合配置
list:该标签用于定义容器中的List集合,并支持通过list-class属性指定List集合的实现类。
set:该标签用于定义容器中的Set集合,并支持通过set-class属性指定Set集合的实现类。
map:该标签用于定义容器中的Map集合,并支持通过map-class属性指定Map集合的实现类。
properties:该标签用于加载一份属性文件,并根据加载的属性文件创建一个Properties Bean实例。
<bean id="dog" class="cony.domain.Puppy" p:kind="古代牧羊犬" />
<bean id="dog2" class="cony.domain.Puppy" p:kind="萌萌的柯基" />
<bean id="dinosaur" class="cony.domain.Dinosaur" p:kind="霸王龙"/>
<bean id="user" class="cony.domain.User"
p:name="黄豆"
p:age="21"
p:dog-ref="dog"
/>
<util:list id="list1" list-class="java.util.ArrayList">
<value type="java.lang.String">你好</value>
<value>齐天大圣</value>
<bean class="javax.swing.JFrame" c:_0="myWin"/>
</util:list>
<util:set id="set1" set-class="java.util.TreeSet">
<value>12</value>
<value>32</value>
<value>2</value>
</util:set>
<util:map id="map1" map-class="java.util.HashMap">
<entry key="little" value-ref="dog"/>
<entry key="big" value-ref="dinosaur"/>
</util:map>
<util:properties id="prop1" location="classpath:abc.properties"/>