Spring IOC容器Bean管理——基于XML方式(續(xù)集)

1、IOC 操作 Bean 管理(FactoryBean)

1匿级、Spring 有兩種類型 bean空镜,一種普通 bean,另外一種工廠 bean(FactoryBean)

2咳焚、普通 bean:在配置文件中定義 bean 類型就是返回類型

3洽损、工廠 bean:在配置文件定義 bean 類型可以和返回類型不一樣 第一步 創(chuàng)建類漫贞,讓這個(gè)類作為工廠 bean潮太,實(shí)現(xiàn)接口 FactoryBean 第二步 實(shí)現(xiàn)接口里面的方法尔苦,在實(shí)現(xiàn)的方法中定義返回的 bean 類型

public class MyBean implements FactoryBean<Course> {
? ? //定義返回bean
? ? @Override
? ? public Course getObject() throws Exception {
? ? ? ? Course course = new Course();
? ? ? ? course.setCname("abc");
? ? ? ? return course;
? ?}
}

<bean id="myBean" class="com.atguigu.spring5.factorybean.MyBean">
</bean>

@Test
public void test3() {
????ApplicationContext context =
????????new ClassPathXmlApplicationContext("bean3.xml");
????Course course = context.getBean("myBean", Course.class);//返回值類型可以不是定義的bean類型署惯!
????System.out.println(course);
}


2、IOC 操作 Bean 管理(bean 作用域)

在 Spring 里面延刘,默認(rèn)情況下旅掂,bean 是單實(shí)例對(duì)象,下面進(jìn)行作用域設(shè)置:

(1)在 spring 配置文件 bean 標(biāo)簽里面有屬性(scope)用于設(shè)置單實(shí)例還是多實(shí)例
(2)scope 屬性值 第一個(gè)值 默認(rèn)值访娶,singleton商虐,表示是單實(shí)例對(duì)象 第二個(gè)值 prototype,表示是多實(shí)例對(duì)象

<bean id="book" class="com.atguigu.spring5.collectiontype.Book" scope="prototype"><!--設(shè)置為多實(shí)例-->?
? ? ? ?<property name="list" ref="bookList"></property>
</bean>

(3)singleton 和 prototype 區(qū)別
? ? ? ? a)singleton 單實(shí)例崖疤,prototype 多實(shí)例
? ? ? ? b)設(shè)置 scope 值是 singleton 時(shí)候秘车,加載 spring 配置文件時(shí)候就會(huì)創(chuàng)建單實(shí)例對(duì)象 ;設(shè)置 scope 值是 prototype 時(shí)候劫哼,不是在加載 spring 配置文件時(shí)候創(chuàng)建對(duì)象叮趴,在調(diào)用 getBean 方法時(shí)候創(chuàng)建多實(shí)例對(duì)象


3、IOC 操作 Bean 管理(bean 生命周期)

1权烧、生命周期 :從對(duì)象創(chuàng)建到對(duì)象銷毀的過(guò)程
2眯亦、bean 生命周期
(1)通過(guò)構(gòu)造器創(chuàng)建 bean 實(shí)例(無(wú)參數(shù)構(gòu)造)
(2)為 bean 的屬性設(shè)置值和對(duì)其他 bean 引用(調(diào)用 set 方法)
(3)調(diào)用 bean 的初始化的方法(需要進(jìn)行配置初始化的方法)
(4)bean 可以使用了(對(duì)象獲取到了)
(5)當(dāng)容器關(guān)閉時(shí)候,調(diào)用 bean 的銷毀的方法(需要進(jìn)行配置銷毀的方法)
3般码、演示 bean 生命周期 :

? ? ? ? public class Orders {
? ? ? ? ?//無(wú)參數(shù)構(gòu)造
? ? ? ? ?public Orders() {
? ? ? ? ?System.out.println("第一步 執(zhí)行無(wú)參數(shù)構(gòu)造創(chuàng)建 bean 實(shí)例");
? ? ? ? ?}
? ? ? ? ?private String oname;
? ? ? ? ?public void setOname(String oname) {
? ? ? ? ?this.oname = oname;
? ? ? ? ?System.out.println("第二步 調(diào)用 set 方法設(shè)置屬性值");
? ? ? ? ?}
? ? ? ? ?//創(chuàng)建執(zhí)行的初始化的方法
? ? ? ? ?public void initMethod() {
? ? ? ? ?System.out.println("第三步 執(zhí)行初始化的方法");
? ? ? ? ?}
? ? ? ? ?//創(chuàng)建執(zhí)行的銷毀的方法
? ? ? ? ?public void destroyMethod() {
? ? ? ? ?System.out.println("第五步 執(zhí)行銷毀的方法");
? ? ? ? ?}
? ? ? ? }

public class MyBeanPost implements BeanPostProcessor {//創(chuàng)建后置處理器實(shí)現(xiàn)類
? ? @Override
? ? public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
? ? ? ? System.out.println("在初始化之前執(zhí)行的方法");
? ? ? ? return bean;
? ? }
? ? @Override
? ? public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
? ? ? ? System.out.println("在初始化之后執(zhí)行的方法");
? ? ? ? return bean;
? ? }
}

<!--配置文件的bean參數(shù)配置-->
<bean id="orders" class="com.atguigu.spring5.bean.Orders" init-method="initMethod" destroy-method="destroyMethod"> <!--配置初始化方法和銷毀方法-->
? ? <property name="oname" value="手機(jī)"></property><!--這里就是通過(guò)set方式(注入屬性)賦值-->
</bean>

<!--配置后置處理器-->
<bean id="myBeanPost" class="com.atguigu.spring5.bean.MyBeanPost"></bean>

@Test
public void testBean3() {
// ApplicationContext context =
// new ClassPathXmlApplicationContext("bean4.xml");
ClassPathXmlApplicationContext context =
????????new ClassPathXmlApplicationContext("bean4.xml");
Orders orders = context.getBean("orders", Orders.class);
System.out.println("第四步 獲取創(chuàng)建 bean 實(shí)例對(duì)象");
System.out.println(orders);
//手動(dòng)讓 bean 實(shí)例銷毀
context.close();
}

4妻率、bean 的后置處理器,bean 生命周期有七步 (正常生命周期為五步板祝,而配置后置處理器后為七步)
(1)通過(guò)構(gòu)造器創(chuàng)建 bean 實(shí)例(無(wú)參數(shù)構(gòu)造)
(2)為 bean 的屬性設(shè)置值和對(duì)其他 bean 引用(調(diào)用 set 方法)
(3)把 bean 實(shí)例傳遞 bean 后置處理器的方法 postProcessBeforeInitialization
(4)調(diào)用 bean 的初始化的方法(需要進(jìn)行配置初始化的方法)
(5)把 bean 實(shí)例傳遞 bean 后置處理器的方法 postProcessAfterInitialization
(6)bean 可以使用了(對(duì)象獲取到了)
(7)當(dāng)容器關(guān)閉時(shí)候宫静,調(diào)用 bean 的銷毀的方法(需要進(jìn)行配置銷毀的方法)


4、IOC 操作 Bean 管理(外部屬性文件)

方式一:直接配置數(shù)據(jù)庫(kù)信息 :(1)配置Druid(德魯伊)連接池 (2)引入Druid(德魯伊)連接池依賴 jar 包

<!--直接配置連接池-->
? ? <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
? ? ? ? <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
? ? ? ? <property name="url" value="jdbc:mysql://localhost:3306/userDb"></property>
? ? ? ? <property name="username" value="root"></property>
? ? ? ? <property name="password" value="root"></property>
? ?</bean>

方式二:引入外部屬性文件配置數(shù)據(jù)庫(kù)連接池
(1)創(chuàng)建外部屬性文件券时,properties 格式文件孤里,寫(xiě)數(shù)據(jù)庫(kù)信息(jdbc.properties)

? ? prop.driverClass=com.mysql.jdbc.Driver
? ? prop.url=jdbc:mysql://localhost:3306/userDb
? ? prop.userName=root
? ? prop.password=root

(2)把外部 properties 屬性文件引入到 spring 配置文件中 —— 引入 context 名稱空間

<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"
? ? ? ?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"><!--引入context名稱空間-->

? ? ? ? <!--引入外部屬性文件-->
? ? <context:property-placeholder location="classpath:jdbc.properties"/>

? ? <!--配置連接池-->
? ? <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
? ? ? ? <property name="driverClassName" value="${prop.driverClass}"></property>
? ? ? ? <property name="url" value="${prop.url}"></property>
? ? ? ? <property name="username" value="${prop.userName}"></property>
? ? ? ? <property name="password" value="${prop.password}"></property>
? ? </bean>

</beans>


版權(quán)聲明:本文為CSDN博主「來(lái)點(diǎn)淦貨」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議橘洞,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明捌袜。原文鏈接:https://blog.csdn.net/weixin_45496190/article/details/107067200

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市炸枣,隨后出現(xiàn)的幾起案子虏等,更是在濱河造成了極大的恐慌,老刑警劉巖抛虏,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博其,死亡現(xiàn)場(chǎng)離奇詭異套才,居然都是意外死亡迂猴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)背伴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沸毁,“玉大人峰髓,你說(shuō)我怎么就攤上這事∠⒊撸” “怎么了携兵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)搂誉。 經(jīng)常有香客問(wèn)我徐紧,道長(zhǎng),這世上最難降的妖魔是什么炭懊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任并级,我火速辦了婚禮,結(jié)果婚禮上侮腹,老公的妹妹穿的比我還像新娘嘲碧。我一直安慰自己,他們只是感情好父阻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布愈涩。 她就那樣靜靜地躺著,像睡著了一般加矛。 火紅的嫁衣襯著肌膚如雪履婉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天斟览,我揣著相機(jī)與錄音谐鼎,去河邊找鬼。 笑死趣惠,一個(gè)胖子當(dāng)著我的面吹牛狸棍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播味悄,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼草戈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了侍瑟?” 一聲冷哼從身側(cè)響起唐片,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涨颜,沒(méi)想到半個(gè)月后费韭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庭瑰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年星持,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弹灭。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡督暂,死狀恐怖揪垄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逻翁,我是刑警寧澤饥努,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站八回,受9級(jí)特大地震影響酷愧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缠诅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一伟墙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滴铅,春花似錦戳葵、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至噩翠,卻和暖如春戏自,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伤锚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工擅笔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屯援。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓猛们,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狞洋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弯淘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

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