Spring5(2) - IOC容器(1)

IOC容器(1)

BeanFactory
ApplicationContext
bean的創(chuàng)建時(shí)期

spring Ioc容器(container)
BeanFactory:Spring最底層的接口,值提供了IOC功能,負(fù)責(zé)創(chuàng)建,組裝,管理bean

在應(yīng)用中薪韩,一般不使用Beanfactory,而推薦使用ApplicationContext(應(yīng)用上下文)

ApplicationContext接口繼承了BeanFactory,除此之外,還提供了AOP集成丹莲,國際化處理,事件傳播尸诽,統(tǒng)一資源價(jià)值等功能

bean的創(chuàng)建時(shí)間
1.BeanFactory需要等到獲取一個(gè)bean的時(shí)候才會(huì)去創(chuàng)建bean ---延遲初始化
2.ApplicationContext在啟動(dòng)spring容器時(shí)就會(huì)創(chuàng)建所有的bean(Web應(yīng)用推薦)甥材。

代碼應(yīng)用

(1) person類

package com.keen.container;

public class Person {
    
    public Person() {
        System.out.println("constractor Person....");
    }

}

(2)配置文件

<?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">
 
 <bean id = "person" class ="com.keen.container.Person"/>
</beans>

(3)測(cè)試

package com.keen.container;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class ContainerTest {
     //目的是得到spring 容器幫我們創(chuàng)建的person對(duì)象
    //1.使用beanFactory測(cè)試
    @Test
    void testBeanFactory() throws Exception {
        Resource resource = new ClassPathResource("com/keen/container/container.xml");
        //我們的最終目的是得到BeanFactory對(duì)象
        BeanFactory factory =new XmlBeanFactory(resource); 
        System.out.println("************************");
        Person p = factory.getBean("person",Person.class);
        System.out.println(p);
    }
    /*運(yùn)行結(jié)果:
        ************************
        constractor Person....
        com.keen.container.Person@3c0a50da
     結(jié)論:BeanFactory有延遲初始化的特點(diǎn),在構(gòu)建Spring容器時(shí)性含,
     它不會(huì)立馬去創(chuàng)建容器中的bean對(duì)象洲赵,而是要等到從容器中獲取對(duì)象的時(shí)候,
     才去創(chuàng)建對(duì)象商蕴。
     */
    
    //2.使用ApplicationContext測(cè)試
    @Test
    void testName() throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("com/keen/container/container.xml");
        System.out.println("************************");
        Person p = ctx.getBean("person",Person.class);
        System.out.println(p);
    }
    /*運(yùn)行結(jié)果:
        constractor Person....
        ************************
        com.keen.container.Person@56a6d5a6
        
        結(jié)論:在創(chuàng)建Spring容器的時(shí)候叠萍,就會(huì)把容器中管理的bean立馬初始化
        而不會(huì)等到獲取bean的時(shí)候才去初始化。
     */
}

(4)我們的另外一種測(cè)試方法:Spring測(cè)試

package com.keen.container;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig
public class ContainerSpringTest {
    @Autowired //完成設(shè)置和注入容器對(duì)象
    private Person person;

    //Autowired 注釋不僅可以幫我們注入容器中的對(duì)象, 還可以注入容器對(duì)象

    @Autowired
    private BeanFactory beanfactory;

    @Autowired
    private ApplicationContext applicationContext;

    @Test
    void testSpring() throws Exception {
        //默認(rèn)是applicationContext
        System.out.println(person);
        System.out.println(beanfactory);
        System.out.println(applicationContext);
    }
}
//注意??:此時(shí)我們的配置文件一定要以「“測(cè)試類的類名”-context.xml」命名P魃獭?凉取!格郁!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腹殿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子理张,更是在濱河造成了極大的恐慌赫蛇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雾叭,死亡現(xiàn)場(chǎng)離奇詭異悟耘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)织狐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門暂幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筏勒,“玉大人,你說我怎么就攤上這事旺嬉」苄校” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵邪媳,是天一觀的道長(zhǎng)捐顷。 經(jīng)常有香客問我,道長(zhǎng)雨效,這世上最難降的妖魔是什么迅涮? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮徽龟,結(jié)果婚禮上叮姑,老公的妹妹穿的比我還像新娘。我一直安慰自己传透,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布极颓。 她就那樣靜靜地躺著,像睡著了一般讼昆。 火紅的嫁衣襯著肌膚如雪托享。 梳的紋絲不亂的頭發(fā)上浸赫,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音既峡,去河邊找鬼。 笑死碧查,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忠售。 我是一名探鬼主播传惠,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼稻扬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了泰佳?” 一聲冷哼從身側(cè)響起盼砍,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浇坐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體近刘,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擒贸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了觉渴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酗宋。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疆拘,靈堂內(nèi)的尸體忽然破棺而出蜕猫,到底是詐尸還是另有隱情,我是刑警寧澤哎迄,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布回右,位于F島的核電站,受9級(jí)特大地震影響漱挚,放射性物質(zhì)發(fā)生泄漏翔烁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一旨涝、第九天 我趴在偏房一處隱蔽的房頂上張望蹬屹。 院中可真熱鬧,春花似錦白华、人聲如沸慨默。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厦取。三九已至,卻和暖如春管搪,著一層夾襖步出監(jiān)牢的瞬間虾攻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工更鲁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霎箍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓澡为,卻偏偏與公主長(zhǎng)得像漂坏,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359