Spring-002-bean管理(XML文件配置)

Bean實例化的方式

  • 在spring里面通過配置文件創(chuàng)建對象

  • bean實例化三種方式實現(xiàn)

    • 使用類的無參數(shù)構造創(chuàng)建(重點/主要使用)
    <bean id="user" class="com.ljy.spring.User"></bean>
    

    如果類里面沒有無參構造則會出錯

    • 使用靜態(tài)工廠創(chuàng)建

    創(chuàng)建一個靜態(tài)方法,返回類對象

    <!--使用靜態(tài)工廠創(chuàng)建對象  -->
     <bean id="bean2" class="com.ljy.spring2.Bean2Factory" factory-method="getBean2"></bean>
    
    • 使用實例工廠創(chuàng)建

    創(chuàng)建不是靜態(tài)的方法谦纱,返回類對象

    <!--實例工廠創(chuàng)建對象  --> 
    <!--創(chuàng)建工廠對象  --> 
    <bean id = "bean3Factory" class="com.ljy.bean.Bean3Factory"></bean>
    <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
    
    
    

bean標簽常用屬性

  1. id屬性
    給bean起名字,id屬性值名稱不能包含特殊符號亲轨,根據(jù)id得到配置對象
  2. class屬性
    創(chuàng)建對象所在的類的全路徑
  3. name屬性
    跟id屬性一樣脊髓,但是id屬性值不能包含特殊符號 但是name屬性值里面可以包含特殊符號,不過目前都用id
  4. scope屬性
    屬性值有
    • singleton:默認值,單例的 對象只能創(chuàng)建一次
    • prototype: 多例的 每次創(chuàng)建都是一個新的對象
    • request:創(chuàng)建對象把對象放在request域里面
    • session:創(chuàng)建對象吧對象放在session里
    • globalSession:創(chuàng)建對象把對象放在globalSession里面全局Session 單點登錄

屬性注入

  1. 創(chuàng)建對象時候 向類的屬性設置值
  2. 屬性注入的方式(三種)
    1. set注入
      image
      image
    2. 有參數(shù)構造注入
      image
      image
    3. 接口注入 不常用
      image
      image
  3. spring中只支持前兩種方式
    1.使用有參構造函數(shù)注入(不常用)
    applicationContex.xml:
    <!--  使用有參數(shù)構造注入屬性 -->   
    <bean id="demo" class="com.ljy.property.PropertyDemo1">
    <!-- 使用有參構造 -->
    <constructor-arg name="username" value="xiaohong"></constructor-arg>
    </bean>   
    
    
    public class PropertyDemo1 {
    private String username;
    
    public PropertyDemo1(String username) {
        super();
        this.username = username;
    }
    public void test1(){
        System.out.println("demo1++++"+username);
    }
    

}

2.使用set注入

public class Book {
    private String bookname;


    public String getBookname() {
        return bookname;
    }


    public void setBookname(String bookname) {
        this.bookname = bookname;
    }


    public void demobook(){
        System.out.println("book:"+bookname);
    }
}
<bean id="book" class="com.ljy.property.Book">
        <!-- 屬性注入 name屬性名稱 value屬性值 -->
        <property name="bookname" value="西游記"></property>
    </bean> 

注入對象類型屬性

  1. 創(chuàng)建 service類和dao類

    1. 在service得到dao對象:
  2. 具體實現(xiàn)過程

    1. 在Service里面擦dao作為類型屬性
    2. 生成dao類型的屬性的set方法
    public class UserService {
    //定義一個dao類型屬性  
        private UserDao userDao;
        //生成set方法
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    }
    
    <!-- 注入 對象類型屬性-->
    <bean id="userDao" class="com.ljy.ioc.UserDao"></bean>
    <bean id="userService" class="com.ljy.ioc.UserService">
        <!-- 注入dao對象 現(xiàn)在不用value屬性 因為不是字符串 而是對象 而要換做ref屬性:dao配置bean標簽中id值 -->
        <property name="userDao" ref="userDao"></property> <!-- 這里創(chuàng)建了userDao的對象 并注入給userService的UserDao類型的屬性 -->
    </bean>
    
    
    
    

P名稱空間注入

public class Person {
    private String pname;

    public void setPname(String pname) {
        this.pname = pname;
    }
    public void test1(){
        System.out.println("person..."+pname);
    }
}
<!-- p名稱空間注入 -->  
    <bean id="person" class="com.ljy.property.Person" p:pname="lucy"></bean>

注入復雜類型

  1. 數(shù)組
  2. list集合
  3. map集合
  4. properties類型
<bean id="person" class="com.ljy.property.Person">
        <!-- arrs -->
        <property name="arrs">
            <list>
                <value>lily</value>
                <value>lucy</value>
                <value>jack</value>
            </list>
        </property>
        <!-- list -->
        <property name="list">
            <list>
                <value>李四</value>
                <value>張三</value>
                <value>王五</value>
            </list>
        </property>
        <!-- map -->
        <property name="map">
            <map>
                <entry key="aa" value="小李"></entry>
                <entry key="bb" value="小張"></entry>
                <entry key="cc" value="小王"></entry>
            </map>
        </property>
        <!-- properties -->
        <property name="properties">
            <props>
                <prop key="driverclass">com.mysql.jdbc.Driver</prop>
                <prop key="username">root</prop>
            </props>
            
        </property>
    </bean>
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class Person {
    private String pname;
    private String[] arrs;
    private List<String> list;
    private Map<String,String> map;
    private Properties properties;
    public void setPname(String pname) {
        this.pname = pname;
    }
    public void setArrs(String[] arrs) {
        this.arrs = arrs;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public void setMap(Map<String, String> map) {
        this.map = map;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    public void test1(){
        System.out.println("person..."+pname);
        System.out.println("arrs..."+Arrays.toString(arrs));
        System.out.println("list..."+list);
        System.out.println("map..."+map);
        System.out.println("Properties..."+properties);
    }
}

輸出結果:


image

IOC和DI的區(qū)別

IOC:控制反轉押赊,把對象創(chuàng)建交給spring進行配置
DI: 依賴注入, 向類里面的屬性注入值
關系:依賴注入不能單獨存在,需要在ioc基礎之上完成操作

Spring整合web項目

  1. 加載spring核心配置文件
    //加載spring配置文件,根據(jù)創(chuàng)建對象
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContex.xml");
    
    1. new對象包斑,功能可以實現(xiàn)流礁,效率很低
  2. 實現(xiàn)思想:把家在配置文件和創(chuàng)建對象的過程,在服務器啟動時候完成
  3. 實現(xiàn)原理
    1. ServletContext對象
    2. 監(jiān)聽器
    3. 具體使用:
      • 在服務器啟動時候罗丰,為每個項目創(chuàng)建一個ServletContext對象
      • 在ServletContext對象創(chuàng)建的時候神帅,使用監(jiān)聽器可以具體到ServletContext對象在什么時候創(chuàng)建
      • 使用監(jiān)聽器監(jiān)聽到ServletContext對象創(chuàng)建時候,
        • 加載spring配置文件萌抵,把配置文件配置對象創(chuàng)建
        • 把創(chuàng)建對象放到ServletContext域對象里面(setAttribute方法)
      • 獲取對象時候,到ServletContext域得到(getAttribute()方法)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末找御,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绍填,更是在濱河造成了極大的恐慌霎桅,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讨永,死亡現(xiàn)場離奇詭異滔驶,居然都是意外死亡,警方通過查閱死者的電腦和手機卿闹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門揭糕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锻霎,你說我怎么就攤上這事著角。” “怎么了旋恼?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵吏口,是天一觀的道長。 經(jīng)常有香客問我蚌铜,道長锨侯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任冬殃,我火速辦了婚禮囚痴,結果婚禮上,老公的妹妹穿的比我還像新娘审葬。我一直安慰自己深滚,他們只是感情好奕谭,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痴荐,像睡著了一般血柳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上生兆,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天难捌,我揣著相機與錄音,去河邊找鬼鸦难。 笑死根吁,一個胖子當著我的面吹牛,可吹牛的內容都是我干的合蔽。 我是一名探鬼主播击敌,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拴事!你這毒婦竟也來了沃斤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤刃宵,失蹤者是張志新(化名)和其女友劉穎衡瓶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體组去,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡鞍陨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年步淹,在試婚紗的時候發(fā)現(xiàn)自己被綠了从隆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡缭裆,死狀恐怖键闺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情澈驼,我是刑警寧澤辛燥,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站缝其,受9級特大地震影響挎塌,放射性物質發(fā)生泄漏。R本人自食惡果不足惜内边,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一榴都、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漠其,春花似錦嘴高、人聲如沸竿音。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽春瞬。三九已至,卻和暖如春套啤,著一層夾襖步出監(jiān)牢的瞬間宽气,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工潜沦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抹竹,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓止潮,卻偏偏與公主長得像窃判,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喇闸,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法袄琳,類相關的語法,內部類的語法燃乍,繼承相關的語法唆樊,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理刻蟹,服務發(fā)現(xiàn)逗旁,斷路器,智...
    卡卡羅2017閱讀 134,714評論 18 139
  • 來源:關于Spring IOC (DI-依賴注入)你需要知道的一切作者:zejian Dao層(AccountDa...
    楊井閱讀 5,338評論 0 27
  • 假如心靈還有委屈舆瘪,心靈會有委屈嗎片效?我想說會的,一定會有英古!因為只要我們還存活于世上淀衣,只要我們還在呼吸,就會有喜樂轉...
    8ae649cc071c閱讀 409評論 0 1
  • 雨過天晴召调,夜跑三十公里膨桥,備戰(zhàn)10月23日洪澤湖半馬和11月6日愛跑群半馬。遺憾的是唠叛,又跑迷路了只嚣,本來想自己跑個全馬...
    李常宏Robin閱讀 240評論 1 1