spring-ioc

spring

四大概念

  • dip:依賴反轉(zhuǎn)埋虹,依賴于抽象,不依賴于具體

  • ioc:控制反轉(zhuǎn),new對象的權(quán)利交由外界實(shí)現(xiàn)

  • di:依賴注入秩冈,對象的不在被依賴內(nèi)部創(chuàng)建,而是由外界注入

  • ioc容器:實(shí)現(xiàn)了ioc設(shè)計(jì)原則的框架

spring簡介

  • 作用:IOC容器斥扛,控制反轉(zhuǎn)入问,將創(chuàng)建對象的權(quán)利交給容器去做

  • 好處:

1、不用new對象稀颁,降低了類與類之間的耦合度

2芬失、面向接口編程

3、整合其他的框架

  • 功能:IOC+AOP+DATA+WEB

spring的原理

將bean的類名以及類與類的關(guān)系配置在xml文件中匾灶,通過反射的方式創(chuàng)建對象棱烂,并且組裝對象。

spring快速入門

1粘昨、導(dǎo)包

core.jar垢啼、context.jar窜锯、expression.jar、bean.jar

2芭析、引入schema文檔(類似dtd文檔)約束xml的文檔

<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">
</beans>

3锚扎、通過xml配置bean

<!-- 1、配置bean -->
    <bean class="com.hemi.bean.CandidateA" id="canA" />

    <bean class="com.hemi.bean.CandidateB" id="canB" />

    <bean class="com.hemi.bean.Personnel" id="personnel">
        <!-- 通過set方法將候選人canA注入到人事部中 -->
        <property name="candidata" ref="candidateA"></property>
    </bean>

4馁启、創(chuàng)建測試類

       //1驾孔、獲取xml文件,并且創(chuàng)建出ApplicationContext
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        //2惯疙、獲取人事部
        Personnel personnel=(Personnel)context.getBean("personnel");
        
        personnel.interview();

xml方式配置詳解

bean的生命周期

id:對象的名字
destory-method:ioc容器摧毀時(shí)創(chuàng)建
init-method:創(chuàng)建對象時(shí)執(zhí)行的方法
depends-on:創(chuàng)建對象之前應(yīng)該創(chuàng)建好的對象
lazy-init:延遲創(chuàng)建對象翠勉,容器初始化時(shí)不參加對象,用的時(shí)候才創(chuàng)建
scope:設(shè)置作用域:singleton(單例)霉颠、prototype(多例)对碌、request、sesssion蒿偎、global session(后面兩個(gè)基本不用)
factory-method:工廠方法
factory-bean:工廠對象
abstract:標(biāo)記為抽象類朽们,不會(huì)創(chuàng)建對象

其中scope、init-method诉位、destory-method是bean的生命周期

屬性注入

  • 1骑脱、構(gòu)造函數(shù)方式注入
    • constructor-arg 構(gòu)造函數(shù)參數(shù)
      • type 使用構(gòu)造函數(shù)參數(shù)類型
      • name 使用構(gòu)造函數(shù)參數(shù)名
      • index 使用位置 0代表構(gòu)造函數(shù)的第一個(gè)位置,1代表第二個(gè)位置苍糠,依次類推

例如:

    <bean class="com.hemi.bean.Personnel" id="personnel">
        <constructor-arg index="0" ref="canB" />
        <constructor-arg index="1" ref="canA" />
    </bean>
  • 2叁丧、set方式注入
    • property 代表屬性名稱
      • value 屬性值
      • ref 對象的引用
    <bean class="com.hemi.bean.Personnel" id="personnel">
        <property name="name" value="lili"></property>
        <property name="programme" ref="canA"></property>
    </bean>
  • 4、p名稱空間

在文檔定義中添加xmlns:p="http://www.springframework.org/schema/p"

<bean class="com.hemi.bean.Personnel" id="personnel" p:name="lisi"></bean>

注入復(fù)雜數(shù)據(jù)類型

    <bean id="complexBean" class="com.spring.bean.ComplexBean">
        <property name="username" value="非凡"></property>
        <property name="arr">
            <array>
                <ref bean="paper"/>
                <ref bean="paper"/>
            </array>
        </property>
        <property name="list">
            <list>
                <value>a</value>
                <value>b</value>
            </list>
        </property>
        <property name="set">
            <set>
                <value>1</value>
                <value>2</value>
            </set>
        </property>
        <property name="map">
            <map>
                <!-- <entry>
                    <key>
                        <value>a</value>
                    </key>
                    <value>abc</value>
                </entry>
                <entry>
                    <key>
                        <value>b</value>
                    </key>
                    <value>bcd</value>
                </entry> -->
                <entry key="a" value="abc"></entry>
                <entry key="b" value="bcd"></entry>
            </map>
        </property>
        <property name="prop">
            <props>
                <prop key="driver">com.mysql.jdbc.Driver</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>

注解方式詳解

注解的使用

1岳瞭、導(dǎo)包:context.jar拥娄、aop.jar

2、添加xsd約束瞳筏,context與aop

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd"> 

3条舔、開啟注解

<!--作用:1、開啟注解  2乏矾、掃描指定的包  -->
<context:component-scan base-package="com.spring.bean"></context:component-scan>

注解創(chuàng)建對象

1、創(chuàng)建對象的注解

  • @Component
  • @Service
  • @Repository
  • @Controller

而外的注解:@Scope("prototype"),指定為多例的

2迁杨、用法:

//創(chuàng)建對象的時(shí)候可以使用參數(shù)钻心,設(shè)置對象的引用變量
@Component("blackBox")
public class BlackBox{
}

//如果沒有寫,那么默認(rèn)使用小駝峰命名
@Service
public class Paper{
}

3铅协、注意:四者用法一致捷沸,dao層一般使用@Repository,service一般使用@Service狐史,web層一般使用@Controller(在springMVC中痒给,web層只能使用@Controller)

注解注入對象

1说墨、注入對象的注解

  • @Resource
  • @Autowired
  • @Qualifier

2、用法:

    //name:按照名稱來查找
    @Resource(name="blackBox")
    private IBox box;
    
    //type:按照類型來查找
    @Resource(type=A4Paper.class)
    private IPaper paper;

    //如果沒有寫苍柏,那么name就是參數(shù)的變量名 box,所以找不到尼斧,然后按照type來查找,IBox類型试吁,所以可以找得到
    //如果沒有寫棺棵,而內(nèi)存中有多個(gè)相同類型的對象,那么就報(bào)錯(cuò)
    @Resource
    private IBox box1;
    //@Autowired不能寫任何參數(shù)
    //按照類型來查找熄捍,如果內(nèi)存中有多個(gè)相同類型的對象烛恤,那么報(bào)錯(cuò)
    //解決問題:使用@Qualifier來指定注入哪個(gè)名稱的對象
    @Autowired
    @Qualifier("blackBox")
    private IBox box;

    @Autowired
    private IPaper paper;

注意:推薦使用@Resource,實(shí)際開發(fā)用哪個(gè)注解余耽,請根據(jù)實(shí)際需求選擇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缚柏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碟贾,更是在濱河造成了極大的恐慌币喧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缕陕,死亡現(xiàn)場離奇詭異粱锐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扛邑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門怜浅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔬崩,你說我怎么就攤上這事恶座。” “怎么了沥阳?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵跨琳,是天一觀的道長。 經(jīng)常有香客問我桐罕,道長脉让,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任功炮,我火速辦了婚禮溅潜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘薪伏。我一直安慰自己滚澜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布嫁怀。 她就那樣靜靜地躺著设捐,像睡著了一般借浊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萝招,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天蚂斤,我揣著相機(jī)與錄音,去河邊找鬼即寒。 笑死橡淆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的母赵。 我是一名探鬼主播逸爵,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凹嘲!你這毒婦竟也來了师倔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤周蹭,失蹤者是張志新(化名)和其女友劉穎趋艘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凶朗,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓷胧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚愤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搓萧。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宛畦,靈堂內(nèi)的尸體忽然破棺而出瘸洛,到底是詐尸還是另有隱情,我是刑警寧澤次和,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布反肋,位于F島的核電站,受9級特大地震影響踏施,放射性物質(zhì)發(fā)生泄漏石蔗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一畅形、第九天 我趴在偏房一處隱蔽的房頂上張望抓督。 院中可真熱鬧,春花似錦束亏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽定铜。三九已至,卻和暖如春怕敬,著一層夾襖步出監(jiān)牢的瞬間揣炕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工东跪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畸陡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓虽填,卻偏偏與公主長得像丁恭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子斋日,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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