一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

初識Spring

 風(fēng)吹亂了流年 2016-10-15

 

現(xiàn)在開始寫寫Spring,Spring它是一個非常優(yōu)秀的 框架,在之前我已經(jīng)寫過Struts和Hibernate,大家知道現(xiàn)在流行的框架體系結(jié)構(gòu)就是Struts + Spring + Hibernate,現(xiàn)在也有的公司用jsf+ajax代替struts, 就是用來做用戶界面層UI。一般是Struts導(dǎo)過來,它有一個表單Bean,以前表單的action就用Struts來做,但現(xiàn)在有了Spring,就由Spring來接手,以后就是由Spring的反轉(zhuǎn)控制以及它的面向切面性,來接手Struts里面的一些東西,也包括日志服務(wù)!
 Spring 是一種多層的JAVAEE應(yīng)用程序框架,其核心就是提供一種新的機(jī)制管理業(yè)務(wù)對象及其依賴關(guān)系。例如IOC(反轉(zhuǎn)控制)也稱為依賴注入,AOP(面向切面編程)!
 我們先來看一張圖片:

 上圖顯示出Spring的七個模塊,第一個AOP主要是面向切面性部分,先簡單的介紹下什么是面向切面性,其實(shí)面向切面性是面向?qū)ο笮灾械囊环N特殊情況,它其實(shí)也是面向?qū)ο笮灾械囊环N概念,只是它不是一種面向?qū)ο蟮囊环N方式了,它把其中的一些方法以及服務(wù)呢做成一種切面!它“你”去通過!在后面再詳說~Spring,它也提供了ORM,學(xué)到現(xiàn)在已經(jīng)對ORM不陌生了,關(guān)系對象模型,大家可能會首先想到Hibernate.,其實(shí)在Spring中它已經(jīng)集成了Hibernate,因此我們需要將 Hibernate加入到Spring中來是非常方便的!我們可以將 其數(shù)據(jù)源直接配在我們的applicationcontext.xml中, 另外它也提供一個Spring Web服務(wù),以及DAO,所謂的數(shù)據(jù)訪問對象,還有就是Spring context對象,所謂的上下文對象,它里面提供了一個ApplicationContext,當(dāng)然它自身也提供了MVC,而最終它底層依賴一個核心的庫,是這樣一種結(jié)構(gòu)!

上圖是它的整體結(jié)構(gòu),這里的容器使用的是Tomcat,它的UI層用的是Struts,它通過Spring的AOP以及ORM技術(shù)與后臺進(jìn)行交互!該圖交互的可能是Hibernate!這樣就體現(xiàn)出Stuts做UI層,而Spring做控制層,Hibernate做模型層。MVC!
Spring 中有一些術(shù)語,介紹如下:
輕量級:它的大小是比較小的,它的核心庫才一百多K,它的整個框架體系加起來也才一MB左右,不是很大!
非入侵式:假如說一種框架你在應(yīng)用的時候很依賴于這種框架,就是說你在開發(fā)的時候很多地方都依賴這種框架,很多地方你離開了這種框架就運(yùn)行不了,像Struts,Struts有點(diǎn)像是入侵式的,像我們的JSP頁,里面有很多<html:***>這樣的一些標(biāo)記!這些標(biāo)記一旦離開了Struts框架體系運(yùn)行 就不行了,那么什么是非入侵式的呢,就是一種組件,或框架,我們離開了它也能活!在這個框架里面也行,這種就叫做非入侵式的,也就是我們的程序與框架關(guān)聯(lián)不是太緊密的!
容器:容器就相當(dāng)于水缸,籃子,它可以存入組件!可以給主鍵提供一個運(yùn)行環(huán)境!它可以幫助管理我們以前需要手工編寫程序去管理對象關(guān)系的工作
IOC/DI:IOC就是我們上面提到的反轉(zhuǎn)控制,或者稱為DI依賴注入!它是Spring最核心的概念,使用Spring我們不必在程序中維護(hù)對象的依賴關(guān)系,只要在XML設(shè)定,Spring容器會自己根據(jù)相關(guān)配置去產(chǎn)生他們之間的關(guān)系,就相當(dāng)于所有的關(guān)系都是在容器運(yùn)行的時候注入的,而本身他們的關(guān)系是沒有的!(Hibernate)也是這樣的!好比有二個人上學(xué),在他們上學(xué)前這二個人之間是沒有任何關(guān)系的,而當(dāng)他們被學(xué)校分配到一個班級的時候,它們就有了關(guān)系 ,同學(xué)!這個就相當(dāng)于是反轉(zhuǎn)控制,在由容器運(yùn)行的時候通過XML來確定類與類之間的關(guān)系!
AOP:也是Spring被人重視的另一方面!其實(shí)AOP只是Spring支持的一個子容器,AOP(Aspect oriented programming)

我們可以在玩游戲的時候經(jīng)常有這樣情景,假如存在一個通道,其中有二個門,假設(shè)當(dāng)我們的角色通過第一道門的時候,我們的紅會加100,而再通過第二道門的時候我們的藍(lán)會加100,現(xiàn)在提出一個問題,就是假如我們這個游戲里面該通道上沒有這二個門,是正常的嗎?當(dāng)然是,也行!只不過人物角色不能在通過該通道的時候加紅和藍(lán),并不影響游戲的整體!就是說有一些服務(wù)在我們的WEB應(yīng)用程序中不是一些必須的服務(wù),就像是Log4J,日志服務(wù)!假如說沒有它,我們的程序也行,就是像這樣的一些服務(wù),它與我們的應(yīng)用程序需求無關(guān),但我們又提供了,那么程序中其實(shí)有時候有許多這樣的情景,就是程序并不是必須,好比上面的門,我們看整個通道,那么這二個門是不是好比是二個切面呢?我們穿過一個門的時候是不是穿過一個空間的切面了!這種就叫做面向切面性,把一種技術(shù)做成一種切面的形式,你只要通過這個切面的形式,你就獲得了這個服務(wù),它其實(shí)是面向?qū)ο蟮囊环N補(bǔ)長,因為面向?qū)ο笮运荒茏鰹橐粋€對象,我們就必須把一個對象完整的做出來,那么好比上面的游戲,有這樣一個戰(zhàn)士,我們做一個戰(zhàn)士類,那么當(dāng)它經(jīng)過那二門的時候,我們?nèi)绻悦嫦驅(qū)ο髞砜紤],那么 我們要在戰(zhàn)士這個類中定義二扇門,一扇加紅一扇加藍(lán),那么這樣這二扇門就變成戰(zhàn)士的二屬性了,那如果這二扇門不存在了,那戰(zhàn)士豈不……這應(yīng)該是不行的!這樣我們以切面性來做的話,就可以將戰(zhàn)士二扇門屬性去掉,然后做二個祝福門,只要戰(zhàn)士經(jīng)過這二門,就會得到紅藍(lán)!這其實(shí)就是一種AOP概念!
持久層:Spring它提供了對持久層的整合!
WEB框架整合:Spring也提供了WEB的MVC解決方案,可以很好的善用IOC和AOP的功能,我們可以輕松的替換掉VIEW層,如使用JSP,結(jié)合Tiles,使用PDF作為用戶的使用界面,也可以使用熟悉的WEB容器如JSF和Struts技術(shù)與Spring整合!
好了,我們來寫一種程序來看一下什么叫做依賴注入:我們建立一個JAVA Project(Spring不一定僅僅用在J2EE中,也一樣可以應(yīng)用在J2SE)

我們僅僅加載一個核心包就可以了,暫時沒有用到AOP以及ORM,

這是產(chǎn)生一個配置文件,我們在J2EE中主要放在WEB-INF下。這里我們放在fengyan包下,單擊完成,我們先建立一個簡單的Bean,User.java.


package fengyan;
/**
 * 
 * 
@author: fengyan
 * date:     2006-12-31 02:37
 *
 
*/
public class User {

    private String userName;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }    
}

我們再寫一個主函數(shù):TestMain.java


package fengyan;
/**
 * 
 * 
@author: fengyan
 * date:     2006-12-31 02:39
 *
 
*/
public class TestMain {

    public static void main(String[] args){
        
        //依賴注入
        User user = new User();
        user.setUserName("fengyan");        
        System.out.println(user.getUserName());

    }

}

這樣在運(yùn)行的時候會輸出:fengyan
但這種看一下,我們的User與TestMain 之間就有關(guān)系了,也就是如果我們要將fengyan改為efly那么我們就需要在TestMain類中修改,這樣就形成了一種緊藕合,它們二個類邊在一塊了,那么 我們能不能有一種方法可以在二個類內(nèi)部都不改動的情況下可以輸出efly呢,肯定是可以的,那么我們現(xiàn)在在Myeclipse給我們生成的spring配置文件 applicationContext.xml中修改,我們先打開該文件,然后鼠標(biāo)移至其內(nèi)部空白地,右鍵,如下:

看到上圖,就想到在Struts中,與我們在Struts的配置文件中操作相似,那個里面是也有new action form,等等!

我們設(shè)置bean ID為user 存放于我們建立的fengyan包下,然后選擇properties屬性,添加一個value屬性userNane,變量名一定要對應(yīng)類中,值就改為我們需要的efly,單擊完成后看該文件代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">

<beans>
    <bean id="user" class="fengyan.User" abstract="false"
        singleton
="true" lazy-init="default" autowire="default"
        dependency-check
="default">
        <property name="userName">
            <value>efly</value>
        </property>
     </bean>
</beans>

看起來有點(diǎn)像我們的jsp中的<jsp:usebean class="">。那么產(chǎn)生后我們?nèi)绾稳フ{(diào)用呢,回頭改改TestMain
package fengyan;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * 
 * 
@author: fengyan
 * date:     2006-12-31 02:39
 *
 
*/
public class TestMain {

    public static void main(String[] args){
        /*
        //依賴注入
        User user = new User();
        user.setUserName("fengyan");        
        System.out.println(user.getUserName());
        
*/
        //ICO 反轉(zhuǎn)控制
        ApplicationContext context = new FileSystemXmlApplicationContext("fengyan/applicationContext.xml");
        //這樣我們獲取了一個全局的應(yīng)用程序上下文對象
        
        
//下面我們創(chuàng)建實(shí)例就不是先前的直接new 了
        User user = (User)context.getBean("user");//是對象類型,需轉(zhuǎn)換
        System.out.println(user.getUserName());
    }

}

這樣efly就輸出了,那么現(xiàn)在我們要再換為xuanfly就不需要動該二個類文件了,直接改配置文件,這就是IOC技術(shù)。 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    狠狠亚洲丁香综合久久| 这里只有九九热精品视频| 国产欧美日韩精品自拍 | 日韩不卡一区二区在线| 久久精品亚洲欧美日韩| 国产一级内射麻豆91| 日韩欧美国产亚洲一区| 黑色丝袜脚足国产一区二区| 午夜精品成年人免费视频| 果冻传媒精选麻豆白晶晶| 日本一本在线免费福利| 草草草草在线观看视频| 激情内射亚洲一区二区三区| 亚洲视频偷拍福利来袭| 成人精品一级特黄大片| 99久久免费中文字幕| 亚洲黄色在线观看免费高清| 中文字幕一二区在线观看| 日韩在线欧美一区二区| 欧美日韩国产欧美日韩| 激情内射亚洲一区二区三区| 国产又色又粗又黄又爽| 日韩欧美三级视频在线| 欧美美女视频在线免费看| 亚洲中文字幕在线综合视频| 欧美日韩国产福利在线观看| 空之色水之色在线播放| 国产亚洲精品俞拍视频福利区| 黑人巨大精品欧美一区二区区 | 亚洲精品一二三区不卡| 三级高清有码在线观看| 91麻豆精品欧美视频| 天堂网中文字幕在线视频| 亚洲国产性感美女视频| 国内精品一区二区欧美| 丁香六月婷婷基地伊人| 爱在午夜降临前在线观看| 91免费一区二区三区| 亚洲欧美日韩熟女第一页| 欧美欧美日韩综合一区| 国产欧美亚洲精品自拍|