※內部 bean
參考文件Comic.java
public class Comic { private String comicName; // setter/getter... }
Book.java
public class Book { private String bookName; private Comic comic; // setter/getter... }
applicationContext.xml
<bean id="co" class="book.vo.Comic" p:comicName="七龍珠"/> <bean id="book1" class="book.vo.Book"> <property name="comic" ref="co" /> </bean> <bean id="book2" class="book.vo.Book"> <property name="comic"> <bean class="book.vo.Comic"> <property name="comicName" value="通靈王" /> </bean> </property> </bean>
測試類
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Book book1 = (Book) appContext.getBean("book1"); Book book2 = (Book) appContext.getBean("book2"); System.out.println(book1.getComic().getComicName()); System.out.println(book2.getComic().getComicName()); ((ClassPathXmlApplicationContext) appContext).close();
※結果:
七龍珠
通靈王
※book1為一般的參考寫法; book2就是內部的bean寫法
※Collection
參考文件※放基本型別
Book.java
public class Book { private Set<String> comicNames; private List<Integer> prices; private Map<String, Integer> comicNameAndPrice; private Properties prop; // setter/getter... }
※可以不用new實體,不過聽說舊版本要new實體
applicationContext.xml
<bean id="book" class="book.vo.Book"> <property name="comicNames"> <set> <value>七龍珠</value> <value>滾球王</value> <value>通靈王</value> <value>滾球王</value> </set> </property> <property name="prices"> <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> </list> </property> <property name="comicNameAndPrice"> <map> <entry key="七龍珠" value="65" /> <entry key="滾球王" value="70" /> <entry> <key><value>通靈王</value></key> <value>75</value> </entry> </map> </property> <property name="prop"> <props> <prop key="aaa">111</prop> <prop key="bbb">222</prop> <prop key="ccc">333</prop> </props> </property> </bean>
測試類
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Book book = (Book) appContext.getBean("book"); System.out.println(book.getComicNames()); System.out.println(book.getPrices()); System.out.println(book.getComicNameAndPrice()); System.out.println(book.getProp()); ((ClassPathXmlApplicationContext) appContext).close();
※結果:
[七龍珠, 滾球王, 通靈王]
[65, 70, 75, 70]
{七龍珠=65, 滾球王=70, 通靈王=75}
{bbb=222, aaa=111, ccc=333}
※可以看出Set真的會把相同的值去掉,而map有兩種寫法
※map可以和Properties互換,就是xml是<prop>,卻用map接; 相反也是一樣,只要注意Properties只能兩邊都是String,而Map用<String, String>即可
※放物件
Comic.java
public class Comic { private String comicName; // setter/getter... }
Book.java
public class Book { private Set<Comic> comicNames; private List<Comic> prices; private Map<Comic, Integer> comicNameAndPrice; // setter/getter... }
applicationContext.xml
<bean id="xxx1" class="book.vo.Comic" p:comicName="七龍珠" /> <bean id="xxx2" class="book.vo.Comic" p:comicName="通靈王" /> <bean id="xxx3" class="book.vo.Comic" p:comicName="滾球王" /> <bean id="book" class="book.vo.Book"> <property name="comicNames"> <set> <ref local="xxx1" /> <ref local="xxx2" /> <ref local="xxx3" /> <ref local="xxx2" /> </set> </property> <property name="prices"> <list> <ref local="xxx1" /> <ref local="xxx2" /> <ref local="xxx3" /> <ref local="xxx2" /> </list> </property> <property name="comicNameAndPrice"> <map> <entry key-ref="xxx1" value="65" /> <entry key-ref="xxx2" value="70" /> <entry key-ref="xxx3" value="75" /> </map> </property> </bean>
測試類
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Book book = (Book) appContext.getBean("book"); Iterator<Comic> itSet = book.getComicNames().iterator(); while (itSet.hasNext()) { System.out.println(itSet.next().getComicName()); } System.out.println(); Iterator<Comic> itList = book.getPrices().iterator(); while (itList.hasNext()) { System.out.println(itList.next().getComicName()); } System.out.println(); Map<Comic, Integer> map = book.getComicNameAndPrice(); Iterator<Comic> itMap = map.keySet().iterator(); while (itMap.hasNext()) { System.out.println(itMap.next().getComicName()); } System.out.println(map.values()); ((ClassPathXmlApplicationContext) appContext).close();
※結果:
七龍珠
通靈王
滾球王
七龍珠
通靈王
滾球王
通靈王
七龍珠
通靈王
滾球王
[65, 70, 75]
※Properties就沒有關聯到物件的ref屬性了
※Collection的merge
參考文件Book.java
public class Book { private List<Integer> prices; // setter/getter... }
applicationContext.xml
<bean id="bookPapa" class="book.vo.Book"> <property name="prices"> <list> <value type="java.lang.Integer">65</value> <value type="java.lang.Integer">70</value> </list> </property> </bean> <bean id="bookSon" class="book.vo.Book" parent="bookPapa"> <property name="prices"> <list merge="true"> <value type="int">75</value> <value type="int">80</value> </list> </property> </bean>
測試類
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); Book bookPapa = (Book) appContext.getBean("bookPapa"); Book bookSon = (Book) appContext.getBean("bookSon"); System.out.println(bookPapa.getPrices()); System.out.println(bookSon.getPrices()); ((ClassPathXmlApplicationContext) appContext).close();
※結果:
[65, 70]
[65, 70, 75, 80]
※bookSon增加屬性parent,還有list有個屬性merge
※set、list、map、prop都有merge
沒有留言:
張貼留言