Spring學(xué)習(xí)筆記 (一)

目錄:

<span id="diceng">Spring的ioc底層原理 (降低類之間的耦合度)</span>:

//偽代碼
//需要實例化的類
public class UserService{
}

public class UserServlet{
    //得到UserService的對象
    //原始的做法:new 對象();  來創(chuàng)建
    
    //經(jīng)過spring后
    UserFactory.getService();   //(下面兩步的代碼調(diào)用的)
}

第一步:創(chuàng)建xml配置文件袒餐,配置要創(chuàng)建的對象類

<bean id="userService" class="cn.blinkit.UserService"/>

第二步:創(chuàng)建工廠類飞蛹,使用dom4j解析配置文件+反射

public class Factory {
    //返回UserService對象的方法
    public static UserService getService() {
        //1.使用dom4j來解析xml文件  
        //根據(jù)id值userService谤狡,得到id值對應(yīng)的class屬性值
        String classValue = "class屬性值";
        //2.使用反射來創(chuàng)建類對象
        Class clazz = Class.forName(classValue);
        //創(chuàng)建類的對象
        UserService service = clazz.newInstance();
        return service;
    }
}

<span id="rumen">Spring入門案例</span>

  1. 第一步:導(dǎo)入jar包
    做spring最基本的功能時卧檐,導(dǎo)入核心的4個jar包
    spring-bens-4.x.x.RELEASE.jar
    spring-core-4.x.x.RELEASE.jar
    spring-context-4.x.x.RELEASE.jar
    spring-expression-4.x.x.RELEASE.jar (SpEL)
    同時還需要導(dǎo)入支持日志輸出的jar包
    `commons-logging-1.2.jar
    log4j-1.2.x.jar

2.創(chuàng)建類墓懂,在類里面創(chuàng)建方法

public class User {
    //spring默認(rèn)創(chuàng)建對象的時候會調(diào)用無參的構(gòu)造方法,如果沒有無參的構(gòu)造霉囚,會出現(xiàn)異常
    public User() {
    }
    
    public void add() {
        System.out.println("Hello World...");
    }
}

3.創(chuàng)建spring配置文件捕仔,配置創(chuàng)建類
1)spring核心配置文件名稱和位置不是固定的,建議放在src下面盈罐,官方建議applicationContext.xml
2)引入schema約束和配置對象創(chuàng)建
在壓縮包:spring-framework-4.3.1.RELEASE\docs\spring-framework-reference\html

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

    <!--ioc入門 配置對象創(chuàng)建-->
    <bean id="user" class="cn.blinkit.User"></bean>

</beans>

4.創(chuàng)建測試

public class UserTest {
    @Test
    public void testUser() {
        //1.加載spring配置文件榜跌,根據(jù)創(chuàng)建對象
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.得到配置創(chuàng)建的對象
        User user = (User)context.getBean("user");
        System.out.println(user);
        user.add();
    }
}

<span id="beanGuanli">Spring的bean管理(xml方式)</span>

bean實例化的方式

1.在spring里面通過配置文件創(chuàng)建對象

2.bean實例化三種方式實現(xiàn)
第一種:使用類的 無參數(shù)構(gòu)造方法 創(chuàng)建(重點)
參照上面的 Spring入門案例
注:類里面如果沒有無參數(shù)的構(gòu)造方法,會出現(xiàn)異常

第二種:使用靜態(tài)工廠創(chuàng)建 (開發(fā)中一般不用)
(1)創(chuàng)建靜態(tài)的方法盅粪,返回類的對象
Bean:

public class Bean {
    public Bean() {
    }

    public void add() {
        System.out.println("bean的add方法....");
    }
}

BeanFactory:

public class BeanFactory {
    //靜態(tài)的方法钓葫,返回bean的對象
    public static Bean getBean() {
        return new Bean();
    }
}

xml配置:

<!--demo2   使用靜態(tài)工廠創(chuàng)建對象-->
    <bean id="bean" class="cn.blinkit.demo2.BeanFactory" factory-method="getBean"></bean>

測試代碼

public class BeanTest {
    @Test
    public void beanTest() {
        //1.加載spring配置文件,根據(jù)創(chuàng)建對象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到配置創(chuàng)建的對象
        Bean bean = (Bean)context.getBean("bean");
        System.out.println(bean);
        bean.add();
    }
}

第三種:使用實例工廠創(chuàng)建 (開發(fā)中一般不用)
(2)創(chuàng)建不是靜態(tài)的方法
Bean和上面的一樣
BeanFactory:

public class BeanFactory2 {
    //普通方法票顾,返回Bean對象
    public Bean getBean() {
        return new Bean();
    }
}

xml配置

<!--demo2   使用實例工廠創(chuàng)建對象-->
    <!-- 創(chuàng)建工廠對象 -->
    <bean id="BeanFactory2" class="cn.blinkit.demo2.BeanFactory2"></bean>
    <bean id="bean2" factory-bean="BeanFactory2" factory-method="getBean"></bean>

測試:

public class BeanTest2 {
    @Test
    public void beanTest2() {
        //1.加載spring配置文件础浮,根據(jù)創(chuàng)建對象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到配置創(chuàng)建的對象
        Bean bean = (Bean)context.getBean("bean2");
        System.out.println(bean);
        bean.add();
    }
}

<span id="beanShuXing">Bean標(biāo)簽常用屬性</span>

1. id屬性

  • 起的名字,id屬性值名稱任意命名
  • id屬性值不能包含特殊符號
  • 根據(jù)id得到配置對象

2. class屬性

  • 創(chuàng)建對象所在類的全路徑

3. name屬性

  • 功能和id屬性一樣奠骄,id屬性值不能包含特殊符號豆同,但是在name值里面可以包含特殊符號

4. scope屬性

  • singleton: spring默認(rèn)的,單例的
    • scope="singleton"
  • prototype:多例的
    • scope="prototype"
  • request:創(chuàng)建對象把對象放到request域里面
    • WEB項目中戚揭,Spring創(chuàng)建一個Bean的對象诱告,將對象存入到request域中。
  • session:創(chuàng)建對象把對象放到session域里面
    • WEB項目中民晒,Spring創(chuàng)建一個Bean的對象精居,將對象存入到session域中。
  • globalSession:全局session(單點登錄) 創(chuàng)建對象把對象放到globalSession域里面
    • WEB項目中潜必,應(yīng)用在Porlet環(huán)境靴姿,如果沒有Porlet環(huán)境那么globalSession相當(dāng)于session。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磁滚,一起剝皮案震驚了整個濱河市佛吓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垂攘,老刑警劉巖维雇,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晒他,居然都是意外死亡吱型,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門陨仅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來津滞,“玉大人铝侵,你說我怎么就攤上這事〈バ欤” “怎么了咪鲜?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撞鹉。 經(jīng)常有香客問我疟丙,道長,這世上最難降的妖魔是什么鸟雏? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任隆敢,我火速辦了婚禮,結(jié)果婚禮上崔慧,老公的妹妹穿的比我還像新娘。我一直安慰自己穴墅,他們只是感情好惶室,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玄货,像睡著了一般皇钞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上松捉,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天夹界,我揣著相機與錄音,去河邊找鬼隘世。 笑死可柿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丙者。 我是一名探鬼主播复斥,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼械媒!你這毒婦竟也來了目锭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤纷捞,失蹤者是張志新(化名)和其女友劉穎痢虹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體主儡,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡奖唯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缀辩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臭埋。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡踪央,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓢阴,到底是詐尸還是另有隱情畅蹂,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布荣恐,位于F島的核電站液斜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叠穆。R本人自食惡果不足惜少漆,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硼被。 院中可真熱鬧示损,春花似錦、人聲如沸嚷硫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仔掸。三九已至脆贵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間起暮,已是汗流浹背卖氨。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留负懦,地道東北人筒捺。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像密似,于是被迫代替她去往敵國和親焙矛。 傳聞我的和親對象是個殘疾皇子放闺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理颇玷,服務(wù)發(fā)現(xiàn)铐拐,斷路器吓著,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,128評論 2 7
  • 1. IOC(Inversion of Control)與DI(Dependency Injection) “控制...
    MrDTree閱讀 432評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法箱蝠,類相關(guān)的語法驰怎,內(nèi)部類的語法吃粒,繼承相關(guān)的語法巧娱,異常的語法闺金,線程的語...
    子非魚_t_閱讀 31,587評論 18 399