Spring 入門(mén)1

1 Spring 框架搭建

Spring Jar包地址 http://repo.springsource.org/libs-release-local/org/springframework/spring/
以Spring4為例,下載后捏题,有如下結(jié)構(gòu):

* docs : API 和開(kāi)發(fā)規(guī)范 . 
* libs : jar 包和源碼 . 
* schema : 約束 .

Spring框架如圖所示公荧,我們使用其核心包 Core Container


核心包如下

lib
    |--com.springsource.org.apache.commons.logging-1.1.1.jar  "Log
    |--com.springsource.org.apache.log4j-1.2.15.jar  "Log
    |--spring-beans-4.2.4.RELEASE.jar  "Beans
    |--spring-context-4.2.4.RELEASE.jar    "Context
    |--spring-core-4.2.4.RELEASE.jar    "Core
    |--spring-expression-4.2.4.RELEASE.jar    "SpEL

Eclipse中建立Java Web項(xiàng)目窟社,點(diǎn)擊Finish后灿里,將相關(guān)Jar包復(fù)制到lib目錄下


創(chuàng)建bean class匣吊,添加元素并生成set/get方法

public class User {

    private String name;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

在src下創(chuàng)建applicationContext.xml文件色鸳,可以先為其添加約束



在文件中,引入bean斩箫,指定class位置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.springframework.org/schema/beans" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">

    <bean  name="user" class="com.ibso.bean.User" ></bean>  
</beans>

創(chuàng)建測(cè)試類狐血,test注解通過(guò)ctrl + 1引入junit包氛雪,運(yùn)行測(cè)試

public class Demo { 
    @Test
    public void fun1(){
        //1 創(chuàng)建容器對(duì)象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2 向容器"要"user對(duì)象
        User u = (User) ac.getBean("user");
        //3 打印user對(duì)象
        System.out.println(u);      
    }
    
}

2 Spring 思想

IOC和 DI:

IOC:控制反轉(zhuǎn) ,將對(duì)象的創(chuàng)建權(quán)交給了Spring.
DI (Dependency Injection): 依賴注入,需要有IOC的環(huán)境井氢,Spring 創(chuàng)建這個(gè)類的過(guò)程中花竞,Spring將類的依賴的屬性設(shè)置進(jìn)去.

Spring 的工廠 (容器 ):

ApplicationContext:
下面有兩個(gè)實(shí)現(xiàn)類
ClassPathXmlApplicationContext:加載類路徑下 Spring 的配置文件 .
FileSystemXmlApplicationContext :加載本地磁盤(pán)路徑下 Spring 的配置文件 .
ApplicationContext :在加載 applicationContext.xml (容器啟動(dòng) )時(shí)候就會(huì)創(chuàng)建 .
BeanFactory :是在 getBean 的時(shí)候才會(huì)生成類實(shí)例 .

3 Spring配置詳解

3.1 Bean元素

3.1.1 Bean元素屬性

Bean元素:使用該元素描述需要spring容器管理的對(duì)象
<bean name="user" class="com.ibso.bean.User" ></bean>
class屬性:被管理對(duì)象的完整類名.
name屬性:給被管理的對(duì)象起個(gè)名字.獲得對(duì)象時(shí)根據(jù)該名稱獲得對(duì)象零远,可以重復(fù).可以使用特殊字符.
id屬性: 與name屬性一模一樣厌蔽,名稱不可重復(fù).不能使用特殊字符.
結(jié)論: 盡量使用name屬性.

3.1.2 對(duì)象創(chuàng)建方式

1 空參創(chuàng)建
<bean name="user" class="cn.itcast.bean.User"></bean>
2 靜態(tài)工廠創(chuàng)建:調(diào)用UserFactory的createUser方法創(chuàng)建名為user2的對(duì)象放入容器
<bean name="user2" class="cn.itcast.b_create.UserFactory" factory-method="createUser" ></bean>
3 實(shí)例工廠創(chuàng)建:調(diào)用UserFactory對(duì)象的createUser2方法創(chuàng)建名為user3的對(duì)象放入容器,實(shí)例工廠類userFactory也需要加入到bean

    <bean  name="user3" 
        factory-bean="userFactory"
        factory-method="createUser2" ></bean>
        
    <bean  name="userFactory" 
        class="cn.itcast.b_create.UserFactory"   ></bean>

3.1.3 Scope屬性:Bean的作用范圍

Scope屬性有如下

* singleton : 默認(rèn)值纬向,單例. 
* prototype : 多例.
* request : WEB項(xiàng)目中,Spring 創(chuàng)建一個(gè) Bean 的對(duì)象 ,將對(duì)象存入到 request 域中 . 
* session : WEB項(xiàng)目中,Spring 創(chuàng)建一個(gè) Bean 的對(duì)象 ,將對(duì)象存入到 session 域中 . 
* globalSession : WEB項(xiàng)目中,應(yīng)用在Porlet環(huán)境.如果沒(méi)有Porlet環(huán)境那么 globalSession相當(dāng)于session.

<bean name="user" class="com.ibso.bean.User" scope="prototype"></bean>

3.1.4 Bean的生命周期配置

通過(guò)配置<bean>標(biāo)簽上的init-method作為Bean的初始化時(shí)候執(zhí)行方法,
配置destroy-method作為Bean的銷毀時(shí)候執(zhí)行方法投剥。
銷毀方法想要執(zhí)行江锨,需是單例創(chuàng)建的Bean而且在工廠關(guān)閉的時(shí)候泳桦,Bean才會(huì)被銷毀.
<bean name="user" class="cn.itcast.bean.User" init-method="init" destroy-method="destory" ></bean>
在user class中添加相應(yīng)的方法

    public void init(){
        System.out.println("我是初始化方法!");
    }
    public void destory(){
        System.out.println("我是銷毀方法!");
    }

3.1.5 分模塊配置

在xml文件中引入配置<import resource="com/ibso/b_create/applicationContext.xml"/>
有兩種配置方式

1 :創(chuàng)建工廠的時(shí)候加載多個(gè)配置文件 : ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml"); 
2 :在一個(gè)配置文件中包含另: <import resource="com/ibso/b_create/applicationContext.xml"/>

3.2 屬性注入

3.2.1 Set注入

值類型注入: 為name屬性注入value
引用類型注入:name屬性注入ref 的bean對(duì)象

    <!-- set方式注入: -->
    <bean  name="user" class="cn.itcast.bean.User" >
        <!--值類型注入: 為User對(duì)象中名為name的屬性注入tom作為值 -->
        <property name="name" value="tom" ></property>
        <property name="age"  value="18" ></property>
        <!-- 引用類型注入: 為car屬性注入下方配置的car對(duì)象 -->
        <property name="car"  ref="car" ></property>
    </bean>
    <!-- 將car對(duì)象配置到容器中 -->
    <bean name="car" class="cn.itcast.bean.Car" >
        <property name="name" value="蘭博基尼" ></property>
        <property name="color" value="黃色" ></property>
    </bean>

3.2.2 構(gòu)造方法注入

構(gòu)造方法注入將調(diào)用User類的構(gòu)造方法谒府,參數(shù)位置可以用index標(biāo)識(shí)完疫,存在多個(gè)構(gòu)造方法不同參數(shù)類型時(shí)壳鹤,用type來(lái)標(biāo)識(shí)

<bean name="user2" class="cn.itcast.bean.User" >
    <!-- name屬性: 構(gòu)造函數(shù)的參數(shù)名 -->
    <!-- index屬性: 構(gòu)造函數(shù)的參數(shù)索引 -->
    <!-- type屬性: 構(gòu)造函數(shù)的參數(shù)類型-->
    <constructor-arg name="name" index="0" type="java.lang.Integer" value="999"  ></constructor-arg>
    <constructor-arg name="car" ref="car" index="1" ></constructor-arg>
</bean>
    public User(String name, Car car) {
        System.out.println("User(String name, Car car)!!");
        this.name = name;
        this.car = car;
    }
    
    public User(Car car,String name) {
        System.out.println("User(Car car,String name)!!");
        this.name = name;
        this.car = car;
    }
    
    public User(Integer name, Car car) {
        System.out.println("User(Integer name, Car car)!!");
        this.name = name+"";
        this.car = car;
    }

3.2.3 p名稱空間注入

走set方法
1.導(dǎo)入P名稱空間 xmlns:p="http://www.springframework.org/schema/p"
2.使用p:屬性完成注入

<!-- p名稱空間注入, 走set方法
    1.導(dǎo)入P名稱空間  xmlns:p="http://www.springframework.org/schema/p"
    2.使用p:屬性完成注入
        |-值類型: p:屬性名="值"
        |-對(duì)象類型: p:屬性名-ref="bean名稱"  -->
    <bean  name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car"  >
    </bean>

3.2.4 spel注入

spel注入: spring Expression Language sping表達(dá)式語(yǔ)言
通過(guò)#{user.name}取user對(duì)象的name值,#{user3.age}取user3對(duì)象的age值啊鸭,注入到user4

<bean  name="user4" class="cn.itcast.bean.User" >
        <property name="name" value="#{user.name}" ></property>
        <property name="age" value="#{user3.age}" ></property>
        <property name="car" ref="car" ></property>
</bean>

<property name ="price" value ="#{80}" />將80注入到price屬性

3.2.5 復(fù)雜類型注入

當(dāng)bean中有復(fù)雜對(duì)象時(shí)赂摆,

public class CollectionBean {
    private Object[] arr;//數(shù)組類型注入
    private List list;//list/set 類型注入
    private Map map;//map類型注入
    private Properties prop;//properties類型注入

通過(guò)以下方式注入

<bean name="cb" class="cn.itcast.c_injection.CollectionBean" >
    <!-- 如果數(shù)組中只準(zhǔn)備注入一個(gè)值(對(duì)象),直接使用value|ref即可 
    <property name="arr" value="tom" ></property>
    -->
    <!-- array注入,多個(gè)元素注入 -->
    <property name="arr">
        <array>
            <value>tom</value>
            <value>jerry</value>
            <ref bean="user4" />
        </array>
    </property>
    
    <!-- 如果List中只準(zhǔn)備注入一個(gè)值(對(duì)象),直接使用value|ref即可 
    <property name="list" value="jack" ></property>-->
    <property name="list"  >
        <list>
            <value>jack</value>
            <value>rose</value>
            <ref bean="user3" />
        </list>
    </property>
    <!-- map類型注入 -->
    <property name="map"  >
        <map>
            <entry key="url" value="jdbc:mysql:///crm" ></entry>
            <entry key="user" value-ref="user4"  ></entry>
            <entry key-ref="user3" value-ref="user2"  ></entry>
        </map> 
    </property>
    <!-- prperties 類型注入 -->
    <property name="prop"  >
        <props>
            <prop key="driverClass">com.jdbc.mysql.Driver</prop>
            <prop key="userName">root</prop>
            <prop key="password">1234</prop>
        </props>
    </property>
</bean>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绊谭,一起剝皮案震驚了整個(gè)濱河市达传,隨后出現(xiàn)的幾起案子趟大,更是在濱河造成了極大的恐慌,老刑警劉巖逊朽,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叽讳,死亡現(xiàn)場(chǎng)離奇詭異岛蚤,居然都是意外死亡懈糯,警方通過(guò)查閱死者的電腦和手機(jī)赚哗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)屿储,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人民褂,你說(shuō)我怎么就攤上這事赊堪∈ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)街立。 經(jīng)常有香客問(wèn)我赎离,道長(zhǎng),這世上最難降的妖魔是什么梁剔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮渗柿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颊亮。我一直安慰自己终惑,他們只是感情好门扇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布件舵。 她就那樣靜靜地躺著脯厨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪临梗。 梳的紋絲不亂的頭發(fā)上稼跳,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天什猖,我揣著相機(jī)與錄音,去河邊找鬼不狮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛推掸,可吹牛的內(nèi)容都是我干的谅畅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牙捉!你這毒婦竟也來(lái)了邪铲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揽惹,沒(méi)想到半個(gè)月后四康,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搪搏,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年囱嫩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了墨闲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸳碧。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杆兵,死狀恐怖琐脏,靈堂內(nèi)的尸體忽然破棺而出缸兔,到底是詐尸還是另有隱情惰蜜,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布格侯,位于F島的核電站联四,受9級(jí)特大地震影響撑教,放射性物質(zhì)發(fā)生泄漏伟姐。R本人自食惡果不足惜愤兵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一秆乳、第九天 我趴在偏房一處隱蔽的房頂上張望矫夷。 院中可真熱鬧双藕,春花似錦忧陪、人聲如沸近范。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)评矩。三九已至,卻和暖如春阱飘,著一層夾襖步出監(jiān)牢的瞬間斥杜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工沥匈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔗喂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓高帖,卻偏偏與公主長(zhǎng)得像缰儿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子散址,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理瞪浸,服務(wù)發(fā)現(xiàn),斷路器齐蔽,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器谈况,...
    simoscode閱讀 6,713評(píng)論 2 22
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評(píng)論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,392評(píng)論 1 92
  • 昨天晚上和朋友聊天华蜒,他說(shuō)蓖谢,2017年想買(mǎi)一臺(tái)保時(shí)捷启绰,后來(lái)到了2018就想說(shuō)買(mǎi)寶駿吧腊嗡。冬春夏秋在一場(chǎng)夜晚的雨水里,揉...
    甫棠君閱讀 253評(píng)論 0 0