05--Spring內(nèi)部Bean和父子Bean

1. 內(nèi)部Bean(inner bean)

當希望一個bean只被某一個類使用時,我們可以使用內(nèi)部bean山析。內(nèi)部bean此時作為某一個類的屬性,只能通過該類實例化。

  • bean
package com.lyc.cn.v2.day01.inner;

public class Outer {
    /** 姓名 **/
    private String name;

    /** 年齡 **/
    private int age;

    /** 內(nèi)部bean **/
    private Inner inner;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Inner getInner() {
        return inner;
    }

    public void setInner(Inner inner) {
        this.inner = inner;
    }

    public void sayHello() {
        System.out.println("outer-->name:" + name + ",age:" + age);
        System.out.println("inner-->name:" + inner.getName() + ",age:" + inner.getAge());
    }
}

package com.lyc.cn.v2.day01.inner;

public class Inner {
    /** 姓名 **/
    private String name;

    /** 年齡 **/
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • xml
<!--InnerBean-->
<bean id="outer" class="com.lyc.cn.v2.day01.inner.Outer">
    <property name="name" value="我是一個外部bean"></property>
    <property name="age" value="20"></property>
    <!--注意這里是property屬性懂版,不是beanName-->
    <property name="inner">
        <bean class="com.lyc.cn.v2.day01.inner.Inner">
            <property name="name" value="我是一個內(nèi)部bean"></property>
            <property name="age" value="10"></property>
        </bean>
    </property>
</bean>
2.父子bean

封裝、繼承躏率、多態(tài)是java的面向對象的基本元素躯畴,同樣,Spring中的bean也可以存在繼承關系薇芝。
子bean必須與父bean保持兼容蓬抄,也就是說子bean中必須有父bean定義的所有屬性
父bean必須是抽象bean或者定義lazy-init=true也就是不讓bean工廠實例化該bean abstract="true" Spring不會實例化該bean

  • bean
package com.lyc.cn.v2.day01.parent;

/**
 * 定義父bean
 * @author: LiYanChao
 * @create: 2018-09-07 16:36
 */
public class Father {

    /** 姓名 **/
    private String name;
    /** 年齡 **/
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

package com.lyc.cn.v2.day01.parent;


package com.lyc.cn.v2.day01.parent;


/**
 * 定義子bean,注意這里SunBean和ParentBean之間無繼承關系,
 * 而是通過配置文件維護其父子關系
 * @author: LiYanChao
 * @create: 2018-09-07 16:36
 */
public class Sun {
    /** 姓名 **/
    private String name;
    /** 年齡 **/
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void sayHello() {
        System.out.println("nage: " + name + ", age: " + age);
    }
}
  • xml
<!-- ====================父子bean==================== -->
<!-- 子bean必須與父bean保持兼容夯到,也就是說子bean中必須有父bean定義的所有屬性 -->
<!-- 父bean必須是抽象bean或者定義lazy-init=true也就是不讓bean工廠實例化該bean abstract="true" Spring不會實例化該bean-->
<bean id="father" class="com.lyc.cn.v2.day01.parent.Father" abstract="true">
    <property name="name" value="father name"/>
</bean>
<bean id="sun" class="com.lyc.cn.v2.day01.parent.Sun" parent="father">
    <property name="name" value="sun name"></property>
    <property name="age" value="18"/>
</bean>
3.測試

在上一章的測試類中添加測試用例嚷缭。

@Test
public void test5() {
    // 內(nèi)部bean
    Outer outer = xmlBeanFactory.getBean("outer", Outer.class);
    outer.sayHello();
}

@Test
public void test6() {
    // 父子bean
    Sun sun = xmlBeanFactory.getBean("sun", Sun.class);
    sun.sayHello();
}
4.結果
========測試方法開始=======

outer-->name:我是一個外部bean,age:20
inner-->name:我是一個內(nèi)部bean,age:10

========測試方法結束=======

========測試方法開始=======

nage: father name(我是從parent Bean繼承過來的), age: 18

========測試方法結束=======

測試結果:

  • 內(nèi)部順利被實例化黄娘,其屬性值也注入進innerbean中峭状。
  • 父子bean中的子bean,也通過繼承parent bean逼争,得到了name屬性优床。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市誓焦,隨后出現(xiàn)的幾起案子胆敞,更是在濱河造成了極大的恐慌,老刑警劉巖杂伟,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件移层,死亡現(xiàn)場離奇詭異,居然都是意外死亡赫粥,警方通過查閱死者的電腦和手機观话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來越平,“玉大人频蛔,你說我怎么就攤上這事∏嘏眩” “怎么了晦溪?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挣跋。 經(jīng)常有香客問我三圆,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任舟肉,我火速辦了婚禮修噪,結果婚禮上,老公的妹妹穿的比我還像新娘路媚。我一直安慰自己割按,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布磷籍。 她就那樣靜靜地躺著,像睡著了一般现柠。 火紅的嫁衣襯著肌膚如雪院领。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天够吩,我揣著相機與錄音比然,去河邊找鬼。 笑死周循,一個胖子當著我的面吹牛强法,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播湾笛,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饮怯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嚎研?” 一聲冷哼從身側響起蓖墅,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎临扮,沒想到半個月后论矾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡杆勇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年贪壳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚜退。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闰靴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出关霸,到底是詐尸還是另有隱情传黄,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布队寇,位于F島的核電站膘掰,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜识埋,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一凡伊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窒舟,春花似錦系忙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洁墙,卻和暖如春蛹疯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背热监。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工捺弦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孝扛。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓列吼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苦始。 傳聞我的和親對象是個殘疾皇子寞钥,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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