Spring2.6高级配置、util简化配置

高级配置
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"/>


猜你喜欢

转载自blog.csdn.net/ack_finding/article/details/78810970