国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Spring學(xué)習(xí)筆記:第一章 Spring的下載和安裝

Spring學(xué)習(xí)筆記:第一章 Spring的下載和安裝

第二章  SpringIoC的入門實(shí)例

Spring的模塊化是很強(qiáng)的,各個(gè)功能模塊都是獨(dú)立的,我們可以選擇的使用。這一章先從SpringIoC開(kāi)始。所謂IoC就是一個(gè)用XML來(lái)定義生成對(duì)象的模式,我們看看如果來(lái)使用的。

1、數(shù)據(jù)模型。

1、如下圖所示有三個(gè)類,Human(人類)是接口,Chinese(中國(guó)人)是一個(gè)子類,American(美國(guó)人)是另外一個(gè)子類。

源代碼如下:

package cn.com.chengang.spring;

public interface Human {

       void eat();

       void walk();

}

package cn.com.chengang.spring;

public class Chinese implements Human {

    /* (非 Javadoc

     * @see cn.com.chengang.spring.Human#eat()

     */

    public void eat() {

        System.out.println("中國(guó)人對(duì)吃很有一套");

    }

 

    /* (非 Javadoc

     * @see cn.com.chengang.spring.Human#walk()

     */

    public void walk() {

        System.out.println("中國(guó)人行如飛");

    }

}

package cn.com.chengang.spring;

public class American implements Human {

    /* (非 Javadoc

     * @see cn.com.chengang.spring.Human#eat()

     */

    public void eat() {

        System.out.println("美國(guó)人主要以面包為主");

    }

 

    /* (非 Javadoc

     * @see cn.com.chengang.spring.Human#walk()

     */

    public void walk() {

        System.out.println("美國(guó)人以車代步,有四肢退化的趨勢(shì)");

    }

}

2、對(duì)以上對(duì)象采用工廠模式的用法如下

創(chuàng)建一個(gè)工廠類Factory,如下。這個(gè)工廠類里定義了兩個(gè)字符串常量,所標(biāo)識(shí)不同的人種。getHuman方法根據(jù)傳入?yún)?shù)的字串,來(lái)判斷要生成什么樣的人種。

package cn.com.chengang.spring;

public class Factory {

    public final static String CHINESE = "Chinese";

    public final static String AMERICAN = "American";

 

    public Human getHuman(String ethnic) {

        if (ethnic.equals(CHINESE))

            return new Chinese();

        else if (ethnic.equals(AMERICAN))

            return new American();

        else

            throw new IllegalArgumentException("參數(shù)(人種)錯(cuò)誤");

    }

}

 

下面是一個(gè)測(cè)試的程序,使用工廠方法來(lái)得到了不同的"人種對(duì)象",并執(zhí)行相應(yīng)的方法。

package cn.com.chengang.spring;

public class ClientTest {

    public static void main(String[] args) {

        Human human = null;

        human = new Factory().getHuman(Factory.CHINESE);

        human.eat();

        human.walk();

        human = new Factory().getHuman(Factory.AMERICAN);

        human.eat();

        human.walk();

    }

}

 

控制臺(tái)的打印結(jié)果如下:

3、采用Spring的IoC的用法如下:

1、在項(xiàng)目根目錄下創(chuàng)建一個(gè)bean.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <bean id="Chinese" class="cn.com.chengang.spring.Chinese"/>

       <bean id="American" class="cn.com.chengang.spring.American"/>

</beans>

bean.xml的位置如下圖,注意不要看花眼把它看成是lib目錄下的了,它是在myspring目錄下的。

 

2、修改ClientTest程序如下:

package cn.com.chengang.spring;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class ClientTest {

    public final static String CHINESE = "Chinese";

    public final static String AMERICAN = "American";

 

    public static void main(String[] args) {

        //        Human human = null;

        //        human = new Factory().getHuman(Factory.CHINESE);

        //        human.eat();

        //        human.walk();

        //        human = new Factory().getHuman(Factory.AMERICAN);

        //        human.eat();

        //        human.walk();

 

        ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

        Human human = null;

        human = (Human) ctx.getBean(CHINESE);

        human.eat();

        human.walk();

        human = (Human) ctx.getBean(AMERICAN);

        human.eat();

        human.walk();

    }

}

從這個(gè)程序可以看到,ctx就相當(dāng)于原來(lái)的Factory工廠,原來(lái)的Factory就可以刪除掉了。然后又把Factory里的兩個(gè)常量移到了ClientTest類里,整個(gè)程序結(jié)構(gòu)基本一樣。

再回頭看原來(lái)的bean.xml文件的這一句

<bean id="Chinese" class="cn.com.chengang.spring.Chinese"/>

id就是ctx.getBean的參數(shù)值,一個(gè)字符串。class就是一個(gè)類(包名+類名)。然后在ClientTest類里獲得Chinese對(duì)象就是這么一句

human = (Human) ctx.getBean(CHINESE);

因?yàn)?/span>getBean方法返回的是Object類型,所以前面要加一個(gè)類型轉(zhuǎn)換。

4、總結(jié)

1)也許有人說(shuō),IoC和工廠模式不是一樣的作用嗎,用IoC好象還麻煩一點(diǎn)。

       舉個(gè)例子,如果用戶需求發(fā)生變化,要把Chinese類修改一下。那么前一種工廠模式,就要更改Factory類的方法,并且重新編譯布署。而IoC只需要將class屬性改變一下,并且由于IoC利用了Java反射機(jī)制,這些對(duì)象是動(dòng)態(tài)生成的,這時(shí)我們就可以熱插撥Chinese對(duì)象(不必把原程序停止下來(lái)重新編譯布署)

       2)也許有人說(shuō),即然IoC這么好,那么我把系統(tǒng)所有對(duì)象都用IoC方式來(lái)生成。

       注意,IoC的靈活性是有代價(jià)的:設(shè)置步驟麻煩、生成對(duì)象的方式不直觀、反射比正常生成對(duì)象在效率上慢一點(diǎn)。因此使用IoC要看有沒(méi)有必要,我認(rèn)為比較通用的判斷方式是:用到工廠模式的地方都可以考慮用IoC模式。

       3)在上面的IoC的方式里,還有一些可以變化的地方。比如,bean.xml不一定要放在項(xiàng)目錄下,也可以放在其他地方,比如cn.com.chengang.spring包里。不過(guò)在使用時(shí)也要變化一下,如下所示:

new FileSystemXmlApplicationContext("src/cn/com/chengang/spring/bean.xml");

另外,bean.xml也可以改成其他名字。這樣我們?cè)谙到y(tǒng)中就可以分門別類的設(shè)置不同的bean.xml

 

4)關(guān)于IoC的低侵入性。

什么是低侵入性?如果你用過(guò)StrutsEJB就會(huì)發(fā)現(xiàn),要繼承一些接口或類,才能利用它們的框架開(kāi)發(fā)。這樣,系統(tǒng)就被綁定在Struts、EJB上了,對(duì)系統(tǒng)的可移植性產(chǎn)生不利的影響。如果代碼中很少涉及某一個(gè)框架的代碼,那么這個(gè)框架就可以稱做是一個(gè)低侵入性的框架。

Spring的侵入性很低,Humen.javaChinese.java等幾個(gè)類都不必繼承什么接口或類。但在ClientTest里還是有一些Spring的影子:FileSystemXmlApplicationContext類和ctx.getBean方式等。

現(xiàn)在,低侵入性似乎也成了判定一個(gè)框架的實(shí)現(xiàn)技術(shù)好壞的標(biāo)準(zhǔn)之一。

 

5)關(guān)于bean.xml的用法

bean.xml的用法還有很多,其中內(nèi)容是相當(dāng)豐富的。假設(shè)Chinese類里有一個(gè)humenName屬性(姓名),那么原的bean.xml修改如下。此后生成Chinese對(duì)象時(shí),"陳剛"這個(gè)值將自動(dòng)設(shè)置到Chinese類的humenName屬性中。而且由于singletontrue這時(shí)生成Chinese對(duì)象將采用單例模式,系統(tǒng)僅存在一個(gè)Chinese對(duì)象實(shí)例。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <bean id="Chinese" class="cn.com.chengang.spring.Chinese"  singleton="true">

              <property name="humenName">

                     <value>陳剛</value>

              </property>

       </bean>

       <bean id="American" class="cn.com.chengang.spring.American"/>

</beans>

 

關(guān)于bean.xml的其它用法,不再詳細(xì)介紹了,大家自己拿Spring的文檔一看就明白了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用Spring中的IoC功能來(lái)實(shí)現(xiàn)我們所開(kāi)發(fā)項(xiàng)目系統(tǒng)的國(guó)際化
Spring中IoC的入門實(shí)例
spring的ioc實(shí)現(xiàn)和例子
Introducing to Spring Framework(中文修訂版)
10分鐘詳解Spring全家桶7大知識(shí)點(diǎn)
Spring(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服