【Spring 】Bean配置詳解

spring概念

簡單來說,spring就是一個用來放置對象和及其依賴關系的容器.

  • IOC Inversion of Control 控制反轉. 指的是 對象的創(chuàng)建權反轉(交給)給 Spring.
    作用是實現(xiàn)了程序的解耦合.
  • DI Dependency Injection 依賴注入.需要有 IOC 的環(huán)境,Spring 創(chuàng)建這個類的過程中,Spring 將類的依賴的屬性設置進去
  • AOP 對程序進行增強:不修改源碼的情況下 可以進行權限校驗,日志記錄,性能監(jiān)控,事務控制 類似python中的裝飾器.

spring入門

  1. 創(chuàng)建 web 項目, 引入 Spring 的開發(fā)包
    目前我們只要關注core,而不需要使用其他擴展

2.引入相關配置文件
在src目錄下新建applicationContext.xml文件
引入約束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

<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.編寫相關的類

public interface UserDao {
  public void sayHello();
}
public class UserDaoImpl implements UserDao {
  @Override
  public void sayHello() {
    System.out.println("Hello Spring...");
  }
}

4.完成配置
在applicationContext.xml中添加
<bean id="userDao" class="cn.itcast.spring.demo1.UserDaoImpl"></bean>

5.編寫測試程序

@Test
// Spring 的方式:
public void demo2(){
  // 創(chuàng)建 Spring 的工廠類:
  ApplicationContext  applicationContext  =  new
  ClassPathXmlApplicationContext("applicationContext.xml");
  // 通過工廠解析 XML 獲取 Bean 的實例.
  UserDao userDao = (UserDao) applicationContext.getBean("userDao");
  userDao.sayHello();
}

spring 工廠即容器

  • ApplicationContext
  • BeanFactory( 過時)
  • BeanFactory 和 ApplicationContext 區(qū)別

BeanFactory :是在 getBean 的時候才會生成類的實例.
ApplicationContext :在加載 applicationContext.xml(容器啟動)時候就會創(chuàng)建.

Spring Bean的相關配置

  • id和name標簽屬性的配置

id : 給Bean一個唯一ID,必須以字母開始酱讶,可以使用字母磕仅、數(shù)字哥艇、連字符沈堡、
下劃線员帮、句話丑念、冒號,不能出現(xiàn)特殊字符.
<bean id=”bookAction”>
name: 給Bean 起個名字,可以重復,可以出現(xiàn)特殊字符

  • scope標簽屬性:Bean是否單例
  • singleton :默認值偶垮,單例的.
  • prototype :多例的.
  • request :WEB 項目中,Spring 創(chuàng)建一個 Bean 的對象,將對象存入到 request 域中.
  • session :WEB 項目中,Spring 創(chuàng)建一個 Bean 的對象,將對象存入到 session 域中.
  • globalSession :WEB 項目中,應用在 Porlet 環(huán)境.如果沒有 Porlet 環(huán)境那么globalSession相當于 session.
  • Bean的生命周期標簽屬性配置

通過配置<bean>標簽上的 init-method 作為 Bean 的初始化的時候執(zhí)行的方法,配置 destroy-method作為 Bean 的銷毀的時候執(zhí)行的方法鼎俘。
銷毀方法想要執(zhí)行,需要是單例創(chuàng)建的 Bean 而且在工廠關閉的時候辩涝,Bean 才會被銷毀.

  • Spring生成Bean的三種方式(了解)
  • 無參數(shù)的構造方法的方式
<!-- 方式一:無參數(shù)的構造方法的實例化 -->
<bean id="bean1" class="cn.itcast.spring.demo3.Bean1"></bean>
  • 靜態(tài)工廠實例化的方式
public class Bean2Factory {
  public static Bean2 getBean2(){
    return new Bean2();
  }
}
<!-- 方式二:靜態(tài)工廠實例化 Bean -->
<bean  id="bean2"  class="cn.itcast.spring.demo3.Bean2Factory"
factory-method="getBean2"/>
  • 實例工廠實例化的方式
public class Bean3Factory {
  public Bean3 getBean3(){
    return new Bean3();
  }
}
<bean id="bean3Factory" class="cn.itcast.spring.demo3.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
  • Spring Bean的屬性注入
  • 構造方法的方式注入屬性
<!-- 第一種:構造方法的方式 -->
<bean id="car" class="cn.itcast.spring.demo4.Car">
<constructor-arg name="name" value=" 保時捷 "/>
<constructor-arg name="price" value="1000000"/>
</bean>
  • set方法的方式注入屬性(掌握)
<!-- 第二種:set 方法的方式 -->
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<property name="name" value=" 奇瑞 QQ"/>
<property name="price" value="40000"/>
</bean>
  • SpEL的方式的屬性注入(掌握 可以引用另一個類的屬性)
<!-- SpEL 的注入的方式 -->
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
  <property name="name" value="#{' 奔馳 '}"/>
  <property name="price" value="#{800000}"/>
</bean>
<bean id="person" class="cn.itcast.spring.demo4.Person">
  <property name="name" value="#{'冠希'}"/>
  <property name="car2" value="#{car2}"/>
</bean>
<bean id="carInfo" class="cn.itcast.spring.demo4.CarInfo"></bean>
引用了另一個類的屬性
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<!-- <property name="name" value="#{'奔馳'}"/> -->
  <property name="name" value="#{carInfo.carName}"/>
  <property name="price" value="#{carInfo.calculatePrice()}"/>
</bean>
  • 對象類型的注入
<!-- 注入對象類型的屬性 -->
<bean id="person" class="cn.itcast.spring.demo4.Person">
  <property name="name" value=" 會希 "/>
<!-- ref 屬性:引用另一個 bean 的 id 或 name -->
  <property name="car2" ref="car2"/>
</bean>
  • 注入復雜類型
<!-- Spring 的復雜類型的注入===================== -->
<bean id="collectionBean" class="cn.itcast.spring.demo5.CollectionBean">
<!-- 數(shù)組類型的屬性 -->
<property name="arrs">
<list>
<value>會希</value>
<value>冠希</value>
<value>天一</value>
</list>
</property>
<!-- 注入 List 集合的數(shù)據(jù) -->
<property name="list">
  <list>
    <value>芙蓉</value>
    <value>如花</value>
    <value>鳳姐</value>
  </list>
</property>
<!-- 注入 Map 集合 -->
<property name="map">
  <map>
    <entry key="aaa" value="111"/>
    <entry key="bbb" value="222"/>
    <entry key="ccc" value="333"/>
  </map>
</property>
<!-- Properties 的注入 -->
<property name="properties">
  <props>
    <prop key="username">root</prop>
    <prop key="password">123</prop>
  </props>
</property>
</bean>

Spring的分配置文件的開發(fā)

在一個配置文件中包含另一個配置文件: <import resource="applicationContext2.xml"></import>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末贸伐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怔揩,更是在濱河造成了極大的恐慌捉邢,老刑警劉巖脯丝,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異歌逢,居然都是意外死亡巾钉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門秘案,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砰苍,“玉大人,你說我怎么就攤上這事阱高∽迹” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵赤惊,是天一觀的道長吼旧。 經(jīng)常有香客問我,道長未舟,這世上最難降的妖魔是什么圈暗? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮裕膀,結果婚禮上员串,老公的妹妹穿的比我還像新娘。我一直安慰自己昼扛,他們只是感情好寸齐,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抄谐,像睡著了一般渺鹦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛹含,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天毅厚,我揣著相機與錄音,去河邊找鬼浦箱。 笑死卧斟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的憎茂。 我是一名探鬼主播珍语,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竖幔!你這毒婦竟也來了板乙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎募逞,沒想到半個月后蛋铆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡放接,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年刺啦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纠脾。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡玛瘸,死狀恐怖,靈堂內的尸體忽然破棺而出苟蹈,到底是詐尸還是另有隱情糊渊,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布慧脱,位于F島的核電站渺绒,受9級特大地震影響,放射性物質發(fā)生泄漏菱鸥。R本人自食惡果不足惜宗兼,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氮采。 院中可真熱鬧殷绍,春花似錦、人聲如沸扳抽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贸呢。三九已至,卻和暖如春拢军,著一層夾襖步出監(jiān)牢的瞬間楞陷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工茉唉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留固蛾,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓度陆,卻偏偏與公主長得像艾凯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子懂傀,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容