Spring IoC之Bean的裝配

  1. 默認(rèn)裝配方式 通過getbean()方式從容器中獲取指定的Bean實例突颊,容器首先會調(diào)用Bean類的無參構(gòu)造器竿报,創(chuàng)建空值的實例對象句携。
    @Test
    public void test01() {
    // 加載Spring配置文件疗锐,創(chuàng)建Spring容器對象
    ApplicationContext ac = new ClassPathXmlApplicationContext("com/ba01/applicationContext.xml");
    // 從容器中獲取指定的bean對象
    ISomeService service = (ISomeService) ac.getBean("someService");
    service.doFirst();
    service.doSecond();
    }
    public SomeServiceImpl() {
    System.out.println("===========");
    }
    若加入有參就會報錯比如SomeServiceImpl(int a);
  1. 動態(tài)工廠Bean(創(chuàng)建工廠對象衡载,調(diào)用方法)
    public class ServiceFactory {
    public ISomeService getSomeService() {
    return new SomeServiceImpl();
    }
    }

@Test
public void test01() {
// 加載Spring配置文件搔耕,創(chuàng)建Spring容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("com/ba02/applicationContext.xml");
// 從容器中獲取指定的bean對象
// ServiceFactory sf = (ServiceFactory) ac.getBean("serviceFactory");
// ISomeService service = sf.getSomeService();
//降低類和類之間的耦合度,看不出實現(xiàn)類是誰,工廠是誰
ISomeService service = (ISomeService) ac.getBean("someService");
service.doFirst();
service.doSecond();
}
<bean id="serviceFactory" class="com.ba02.ServiceFactory"></bean>
<bean id="someService" factory-bean="serviceFactory" factory-method="getSomeService"></bean>
someService對象由serviceFactory工廠的getSomeService方法創(chuàng)建

  1. 靜態(tài)工廠Bean(直接調(diào)用靜態(tài)方法)
    public class ServiceFactory {
    public static ISomeService getSomeService() {
    return new SomeServiceImpl();
    }
    }

    <bean id="someService" class="com.ba03.ServiceFactory" factory-method="getSomeService"></bean>
    someService對象由com.ba03.ServiceFactory類的getSomeService方法創(chuàng)建

4.Bean的作用域
<bean id="someService" class="com.ba04.SomeServiceImpl" scope="prototype"/>
scope="prototype"的bean容器在接受到該類型的對象的請求的時候弃榨,會每次都重新生成一個新的對象給請求方;(即真正使用時才創(chuàng)建菩收,每獲取一次,都會創(chuàng)建不同的對象)
scope="singleton"的bean是由容器來保證這種類型的bean在同一個容器內(nèi)只存在一個共享實例(容器初始化時就創(chuàng)建鲸睛,每次獲取的都是同一個對象娜饵。默認(rèn)的)

?官辈?箱舞??拳亿?5.Bean后處理器(這個還有一些問題)
public class MyBeanPostProcessor implements BeanPostProcessor {
// bean:當(dāng)前調(diào)用Bean后處理器的Bean對象
//beanname:Bean對象的id
@Override
public Object postProcessAfterInitialization(Object bean, String beanname) throws BeansException {
System.out.println("執(zhí)行****After****()");
return bean;
}

@Override
public Object postProcessBeforeInitialization(Object bean, String beanname) throws BeansException {
    System.out.println("執(zhí)行****Before****()");
    return bean;
}

}

public void test01() {
// 加載Spring配置文件晴股,創(chuàng)建Spring容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("com/ba05/applicationContext.xml");
// 從容器中獲取指定的bean對象
ISomeService service1 = (ISomeService) ac.getBean("someService1");
service1.doFirst();
service1.doSecond();
System.out.println("----------------");
ISomeService service2 = (ISomeService) ac.getBean("someService2");
service2.doFirst();
service2.doSecond();
}
<bean id="someService1" class="com.ba05.SomeServiceImpl" />
<bean id="someService2" class="com.ba05.SomeServiceImpl" />
<bean class="com.ba05.MyBeanPostProcessor"></bean>
容器初始化之后對象初始化之前

6.定制Bean的生命始末
public void test01() {
// 加載Spring配置文件,創(chuàng)建Spring容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("com/ba06/applicationContext.xml");
// 從容器中獲取指定的bean對象
ISomeService service = (ISomeService) ac.getBean("someService");
service.doFirst();
service.doSecond();
// 銷毀方法的執(zhí)行有兩個要求:
// 1)被銷毀的對象需要是singleton的肺魁,即單例
// 2)容器要顯示關(guān)閉
((ClassPathXmlApplicationContext) ac).close();// 接口沒有實現(xiàn)類有
}

public void initAfter() {
System.out.println("初始化之后");
}

public void preDestory() {
    System.out.println("銷毀之前");
}

<bean id="someService" class="com.ba06.SomeServiceImpl"
    init-method="initAfter" destroy-method="preDestory" />

7.Bean的生命周期的可控點(diǎn)很多
step1.對象的創(chuàng)建
step2.執(zhí)行setAdao()
step3.beanName=someService
step4.獲取到beanFactory容器
step5.執(zhí)行****Before()
step6.當(dāng)前Bean初始化工作已經(jīng)完畢
step7.初始化之后
step8.執(zhí)行****After
()
step9.執(zhí)行主業(yè)務(wù)方法
step10. 準(zhǔn)備銷毀工作电湘,進(jìn)行銷毀流程
step11.銷毀之前

8.id與name屬性的區(qū)別
id的命名需要滿足XML對ID屬性命名規(guī)范;必須以字幕開頭万搔,可以包含字母胡桨,數(shù)字,下劃線瞬雹,連字符昧谊,句號,冒號酗捌。
name屬性值則可以包含各種字符

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呢诬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胖缤,更是在濱河造成了極大的恐慌尚镰,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哪廓,死亡現(xiàn)場離奇詭異狗唉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涡真,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門分俯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哆料,你說我怎么就攤上這事缸剪。” “怎么了东亦?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵杏节,是天一觀的道長。 經(jīng)常有香客問我,道長奋渔,這世上最難降的妖魔是什么镊逝? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮卒稳,結(jié)果婚禮上蹋半,老公的妹妹穿的比我還像新娘他巨。我一直安慰自己充坑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布染突。 她就那樣靜靜地躺著捻爷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪份企。 梳的紋絲不亂的頭發(fā)上也榄,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音司志,去河邊找鬼甜紫。 笑死,一個胖子當(dāng)著我的面吹牛骂远,可吹牛的內(nèi)容都是我干的囚霸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼激才,長吁一口氣:“原來是場噩夢啊……” “哼拓型!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瘸恼,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤劣挫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后东帅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體压固,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年靠闭,在試婚紗的時候發(fā)現(xiàn)自己被綠了帐我。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡阎毅,死狀恐怖焚刚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扇调,我是刑警寧澤矿咕,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響碳柱,放射性物質(zhì)發(fā)生泄漏捡絮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一莲镣、第九天 我趴在偏房一處隱蔽的房頂上張望福稳。 院中可真熱鬧,春花似錦瑞侮、人聲如沸的圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽越妈。三九已至,卻和暖如春钮糖,著一層夾襖步出監(jiān)牢的瞬間梅掠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工店归, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阎抒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓消痛,卻偏偏與公主長得像且叁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肄满,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理谴古,服務(wù)發(fā)現(xiàn),斷路器稠歉,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評論 6 342
  • 一掰担、Spring框架 1.1 Spring框架是什么 Spring是一種容器框架,用于配置各個組件(bean)并且...
    Jane_Static閱讀 391評論 0 0
  • Spring容器高層視圖 Spring 啟動時讀取應(yīng)用程序提供的Bean配置信息怒炸,并在Spring容器中生成一份相...
    Theriseof閱讀 2,816評論 1 24
  • 都市人有個通病阅羹,就是怕寂寞勺疼、無聊。 一到周末捏鱼,我們便會呼朋引伴执庐,各種飯局聚會下午茶走起,當(dāng)然不忘發(fā)幾條豐富多彩的朋...
    櫻花蝸牛閱讀 504評論 0 2