20060909重陽!!!!

来源:互联网 发布:winzip解压软件下载 编辑:程序博客网 时间:2024/04/27 13:48

Spring學習
Spring可以支持根據Xml文件來創建物建,及設定物件的初始配置,代替直接在程序裡面寫相應代碼.

遵從Spring所用的Xml語法:
首先有一個頂層的標籤:
<beans>
</beans>

裡面可起嵌套多個JavaBean.一個<bean>標籤可以幫你創建一個相應Bean的物件,必須用一個名稱來標示他.
名稱是唯一的,就像Java的變數一樣,不能重複定義.當然還要指定生成哪個JavaBean的物件

<bean id="Kiyohara" class="jp.co.KiyoharaTakuya.spring.HelloSpring">
</bean>

這樣就會調用無參構造函數生成一個Bean物件.也可以通過指定參數調用有參構造函數.
在<Bean>標籤中嵌套0個到多個<construct-arg>標籤來指定每個參數的值.
如;
<beans>
    <bean ...>
        <construct-arg>[表示值的標籤]</construct-arg> <!--第一個參數-->
 <construct-arg>[表示值的標籤]</construct-arg> <!--第二個參數-->
    </bean>
</beans>

如此這般,就會調用有參構造函數了
不只是能創建物建.還可以設置各個屬性的值

<beans>
    <bean ...>
        <construct-arg>[表示值的標籤]</construct-arg> <!--第一個參數-->
 <construct-arg>[表示值的標籤]</construct-arg> <!--第二個參數-->
        <property name="age">[表示值的標籤]</property>     <!--呼叫該Bean的  setAge(...)函數哦-->
        <property name="height">[表示值的標籤]</property>  <!--呼叫該Bean的  setHeight(...)函數哦-->
    </bean>
</beans>


現在到了重點了.就是[表示值的標籤]到底是什麼樣的標籤呢
不同的值標籤代表著不同的數據結構.
有<value><list><map><set><pros><ref>等標籤.
<value>值,如字串,實數,整數,布爾等</value>
<list>表示順序的數據結構.包括數組,跟List接口用的
<map>鍵值對用
<props>屬性用,存的都是String
<ref>表示引用,可以通過指定其他的Bean的ID來指名引用的對象

<value>20</value>       <!--表示20的值.Spring會根據參數類型轉換到String或int等-->


<list>                    <!--從第三項看來,這應該是個字串數組-->
    [表示值的標籤]
    <value>20</value>     <!--若沒有第三項,這個數組會根據情況判斷類型.我沒有是過,請見諒-->
    <value>24</value>
    <value>26abcde</value>
<list>

<set>
    [表示值的標籤]
    <value>20</value>
    <value>20</value>    <!--set.size()應該是1才對,請大家試試看-->
</set>

<map>
    <entry key="Key1">[表示值的標籤]</entry>
    <entry key="Key2">[表示值的標籤]</entry>
    <entry key="Key3"><value>3</value></entry>
</map>


<props>
    <prop key="Key1">sssss</prop>   <!--由於必存字串,所以裡面的sssss會被解釋為"sssss"-->
</pros>


<ref bean="Kiyohara" />  這樣就表示一個引用,引用到之前創建的bean--> id="Kiyohara"的那個Bean

 

在此之前,還要扯遠一下,來看一下FactoryBean
用上面的標籤可以得到一個普通的JavaBean.也就是一個普普通通的類.
FactoryBean是Bean工廠.用他來創建Bean物件,而不是由Xml來創建了.我感覺上這樣可以起到對該bean物件的操作的隱藏效果.

一個類實現了FactoryBean接口.首先就被逼著寫三個函數.getObject,getObjectType等.另一個先省略.這樣你的類就是個工廠類了
很聰明的Spring會判斷在<bean>標籤中指定的class. 若為工廠類的話,將調用該接口的getObject方法取得物件並返回給程序.
若是普通類的話,就返回該物件.這一點是要注意的.

好了,接下來就是解析了
Spring的Jar包中有提供BeanFactory接口.由此接口衍生出很多解釋用的類.我們現在關注的是XmlBeanFactory.
他用於解析Xml來創建物件模型.傳給一個Resource類的物件就行了.常用的有ClassPathResource跟FileSystemResource.
用他們來指定文件.然後就可以來用了.

下面來看看代碼:


BeanFactory bf = new XmlBeanFactory( new ClassPathResource( "myspring.xml" ) );
Object obj = bf.getBean("Kiyohara");  //######注意!!!!

if( obj instanceof Student )
{
    Student Kiyohara = (Student)obj;
    System.out.println(Kiyohara.getAge() );
}

注意第二行.就是用BeanFactory::getBean中指定Id來取得配置文件中相應Bean的物件的.他內部就是會判斷是否有實現FactoryBean,
然後考慮是否調用FactoryBean::getObject來取得物件.如果有實現的話,上述的obj就是getObject返回的物件.注意!

今天寫累了.第一次寫blog.多多指教

 

原创粉丝点击