spring學(xué)習(xí)筆記一-IOC

[TOC]

DIP

一種軟件設(shè)計原則

DIP1.png
DIP2.png
DIP3.png
DIP4.png

IOC

一種設(shè)計模式睬隶,DIP的具體實現(xiàn)锣夹。即控制反轉(zhuǎn),將依賴(低層模塊)對象的獲得交給第三方(系統(tǒng))來控制苏潜。

DI

IOC的一種重要的實現(xiàn)方式

DI.png

IOC容器

IOC1.jpg
IOC2.png

spring簡介

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

好處:不用new對象恤左,降低了類與類之間的耦合度

功能:IOC+AOP+DATA+WEB

spring.png

spring的原理

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

spring快速入門

1戳气、導(dǎo)包

core、context巧鸭、expression、bean

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">
    <!-- 通過構(gòu)造函數(shù)將候選人canA注入到人事部中 -->
    <constructor-arg name="programme" ref="canB" />
</bean>

4婉宰、創(chuàng)建測試類

//1蟹腾、獲取xml文件娃殖,并且創(chuàng)建出ApplicationContext
ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
//2、獲取人事部
Personnel personnel=(Personnel)context.getBean("personnel");

personnel.interview();

注入方式

  • 構(gòu)造函數(shù)方式注入
    • constructor-arg 構(gòu)造函數(shù)參數(shù)
      • type 使用構(gòu)造函數(shù)參數(shù)類型
      • name 使用構(gòu)造函數(shù)參數(shù)名
      • index 使用位置 0代表構(gòu)造函數(shù)的第一個位置掸屡,1代表第二個位置,依次類推
<bean class="com.hemi.bean.Personnel" id="personnel">
    <constructor-arg index="0" ref="canB" />
    <constructor-arg index="1" ref="canA" />
</bean>
  • get、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>
  • p名稱空間

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

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

總結(jié):

spring ioc容器特點:

1、在啟動的時候會將所有的對象按順序創(chuàng)建完畢
2玫鸟、按需注入
3枚碗、按需獲取

bean參數(shù)詳解

id:對象的名字
destory-method:ioc容器摧毀時創(chuàng)建
init-method:創(chuàng)建對象時執(zhí)行的方法
depends-on:創(chuàng)建對象之前應(yīng)該創(chuàng)建好的對象
lazy-init:延遲創(chuàng)建對象
scope:設(shè)置作用域锡足,singleton(單例)、prototype(多例)壳坪、request舶得、sesssion、global session factory-method:工廠方法
factory-bean:工廠對象
abstract:標(biāo)記為抽象類

注解創(chuàng)建對象

創(chuàng)建對象 @Component @Service @Repository @Controller

//創(chuàng)建對象的時候可以使用參數(shù)爽蝴,設(shè)置對象的引用變量
//如果沒有寫沐批,那么默認(rèn)使用小駝峰命名
@Component("blackBox")
public class BlackBox{}

注意:四者用法一致,一般使用@Service

注解注入對象

注入對象的注解 - @Resource - @Autowired

//name:按照名稱來查找
@Resource(name="blackBox")
private IBox box;

//type:按照類型來查找
@Resource(type=A4Paper.class)
private IPaper paper;

//如果沒有寫蝎亚,那么name就是參數(shù)的變量名 box,所以找不到九孩,然后按照type來查找,IBox類型发框,所以可以找得到
//如果沒有寫躺彬,而內(nèi)存中有多個相同類型的對象,那么就報錯
@Resource
private IBox box1;
//@Autowired不能寫任何參數(shù)
//按照類型來查找梅惯,如果內(nèi)存中有多個相同類型的對象宪拥,那么報錯
//解決問題:使用@Qualifier來指定注入哪個名稱的對象
@Autowired
@Qualifier("blackBox")
private IBox box;

@Autowired
private IPaper paper;

注意:用哪個注解根據(jù)實際需求選擇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铣减,隨后出現(xiàn)的幾起案子江解,更是在濱河造成了極大的恐慌,老刑警劉巖徙歼,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犁河,死亡現(xiàn)場離奇詭異,居然都是意外死亡魄梯,警方通過查閱死者的電腦和手機蹂午,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門恕汇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事搓扯°逶茫” “怎么了涎显?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵摧茴,是天一觀的道長。 經(jīng)常有香客問我稀蟋,道長煌张,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任退客,我火速辦了婚禮骏融,結(jié)果婚禮上链嘀,老公的妹妹穿的比我還像新娘。我一直安慰自己档玻,他們只是感情好怀泊,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著误趴,像睡著了一般霹琼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凉当,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天枣申,我揣著相機與錄音,去河邊找鬼纤怒。 笑死,一個胖子當(dāng)著我的面吹牛天通,可吹牛的內(nèi)容都是我干的泊窘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼像寒,長吁一口氣:“原來是場噩夢啊……” “哼烘豹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诺祸,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤携悯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筷笨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憔鬼,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年胃夏,在試婚紗的時候發(fā)現(xiàn)自己被綠了轴或。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仰禀,死狀恐怖照雁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情答恶,我是刑警寧澤饺蚊,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站悬嗓,受9級特大地震影響污呼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜包竹,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一曙求、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦悟狱、人聲如沸静浴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苹享。三九已至,卻和暖如春浴麻,著一層夾襖步出監(jiān)牢的瞬間得问,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工软免, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宫纬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓膏萧,卻偏偏與公主長得像漓骚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子榛泛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蝌蹂,服務(wù)發(fā)現(xiàn),斷路器曹锨,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,152評論 2 7
  • 1. IOC(Inversion of Control)與DI(Dependency Injection) “控制...
    MrDTree閱讀 435評論 0 1
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,806評論 6 342
  • 無論發(fā)生什么孤个,我都會如現(xiàn)在一樣愛你,直到我死去 相愛時的甜言蜜語沛简,現(xiàn)實面前果然不堪一擊 相愛的五個月歲月里齐鲤,我從未...
    四郎2015閱讀 270評論 1 1