<bean id="book" class="book.vo.Book"> <property name="comicNames"> <util:set> <value>七龍珠</value> <value>滾球王</value> <value>通靈王</value> <value>滾球王</value> </util:set> </property> <property name="prices"> <util:list> <value type="java.lang.Integer">65</value> <value type="java.lang.Integer">70</value> <value type="int">75</value> <value type="int">70</value> </util:list> </property> <property name="comicNameAndPrice"> <util:map> <entry key="七龍珠" value="65" /> <entry key="滾球王" value="70" /> <entry> <key> <value>通靈王</value> </key> <value>75</value> </entry> </util:map> </property> <property name="prop"> <util:properties> <prop key="aaa">111</prop> <prop key="bbb">222</prop> <prop key="ccc">333</prop> </util:properties> </property> </bean>
※測試的結果還是一樣
※util:properties還可以連結外面的檔案,如下:
xxx.ooo
apple=\u860B\u679C banana=\u9999\u8549
applicationContext.xml
<property name="prop"> <util:properties location="classpath:properties/xxx.ooo" /> </property>
※properties是我的package名稱,\u開頭的可用native2ascii.exe,在安裝java目錄的bin下,或者在Eclipse增加Spring tools做完,直接打字也可以幫我們轉換
※結果:
{banana=香蕉, apple=蘋果}
※其他屬性
list-class
以List為例,<util:list id="emails" list-class="java.util.LinkedList">list-class就是多型,以java的寫法就是List emails = new LinkedList();而Map的屬性叫 map-class;Set的叫set-class
整個util不只能寫在bean裡,也可和bean同層,取個id後,然後用@Resource(name="id")就可以將值放進去
value-type
value-type屬性類似泛型塞物件
<util:list id="xxx" value-type="java.lang.String"> <value>ooo</value> <ref bean="cb" /> <ref bean="bo" /> <ref bean="ch" /> </util:list> <bean id="bo" class="vo.Book" p:emails-ref="xxx" /> <bean id="cb" class="vo.ComicBook" /> <bean id="ch" class="vo.Chess" />
※util:constant
參考文件看到constant就知道是和static有關
Book.java
public class Book { private String bookStaFin; // setter/getter... }
XXX.java
public class XXX { public static final String OOO = "XOXOX"; }
applicationContext.xml
<bean id="book" class="book.vo.Book"> <!-- 方法一 --> <property name="bookStaFin"> <bean id="book.vo.XXX.OOO" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" /> </property> <!-- 方法二 --> <!-- <property name="bookStaFin"> --> <!-- <util:constant static-field="book.vo.XXX.OOO" /> --> <!-- </property> --> <!-- 方法三 --> <!-- <property name="bookStaFin" ref="ooo" /> --> </bean> <!-- 方法三 --> <!-- <util:constant static-field="book.vo.XXX.OOO" id="ooo" /> -->
測試類
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Book book = (Book) appContext.getBean("book"); System.out.println(book.getBookStaFin()); ((ClassPathXmlApplicationContext) appContext).close();
※方法一是還沒有util的時候用的,class一定要是FieldRetrievingFactoryBean
※方法二和方法三(要打開兩個)就是一個寫裡面一個寫外面而已
※book.vo是package名稱,XXX是Class名稱,OOO是filed名稱
※util:property-path
參考文件一個bean已經有實體了,所以可以取得裡面的方法,而java就直接「.」就可以了,在XML就是現在要介紹的方法,總之就是可以讓我們用id或name一直點下去取值
Book.java
public class Book { private String bookName; private Comic comic; // setter/getter... }
Comic.java
public class Comic { private String comicName; // setter/getter... }
applicationContext.xml
<bean id="book" class="book.vo.Book"> <property name="bookName" value="資治通鑑"/> <property name="comic"> <bean class="book.vo.Comic" p:comicName="七龍珠" /> </property> </bean> <!-- 方法一 --> <bean id="book.bookName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean" /> <bean id="book.comic" class="org.springframework.beans.factory.config.PropertyPathFactoryBean" /> <!-- 方法二 --> <util:property-path id="xxx" path="book.bookName"/> <util:property-path id="ooo" path="book.comic"/>
測試類
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); // 方法一 System.out.println(appContext.getBean("book.bookName")); Comic comic1 = (Comic) appContext.getBean("book.comic"); System.out.println(comic1.getComicName()); // 方法二 System.out.println(appContext.getBean("xxx")); Comic comic2 = (Comic) appContext.getBean("ooo"); System.out.println(comic2.getComicName()); ((ClassPathXmlApplicationContext) appContext).close();
※結果:
資治通鑑
七龍珠
資治通鑑
七龍珠
※方法一是還沒有util的時候用的,class一定要是PropertyPathFactoryBean
※方法一的缺點是id不能自訂,但方法二的id就可以自訂了
沒有留言:
張貼留言