Spring利用工廠或?qū)傩宰⑷?/h1>

本文將介紹通過工廠方法和屬性進(jìn)行bean的注入

靜態(tài)工廠方法的注入

如果一個(gè)類沒有公開的構(gòu)造方法,取而代之的是一個(gè)靜態(tài)方法,那么如何注入呢最盅。
設(shè)一個(gè)類定義如下:

public class Student {
    private int age;
    private String name;
    private String addr;
    private Bag bag;
    private List<String> schedules; // 課程表
    private Set<String> clothes; // 衣服
    private Map<String, Integer> grades; // 成績
    private static class StudentHolder{
        static Student instance = new Student();
    }
    private static Student student;
    public static Student getInstance(){ // 靜態(tài)工廠方法
        return StudentHolder.instance;
    }
}

Student作為一個(gè)單例(例子不太合適)榜跌,對應(yīng)的Spring配置如何呢?只需聲明下類內(nèi)的靜態(tài)方法即可碧库。

 <bean id="student" class="com.limingjian.blog.Student" factory-method="getInstance">
 </bean>

屬性的注入

通常柜与,我們一般通過屬性對bean進(jìn)行注入,這種類包含私有屬性以及對應(yīng)的存取器嵌灰,如下為符合規(guī)則的Student定義:

public class Student {
    private int age;
    private String name;
    private String addr;
    private Bag bag;
    private List<String> schedules; // 課程表
    private Set<String> clothes; // 衣服
    private Map<String, Integer> grades; // 成績

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public Bag getBag() {
        return bag;
    }

    public void setBag(Bag bag) {
        this.bag = bag;
    }

    public List<String> getSchedules() {
        return schedules;
    }

    public void setSchedules(List<String> schedules) {
        this.schedules = schedules;
    }

    public Set<String> getClothes() {
        return clothes;
    }

    public void setClothes(Set<String> clothes) {
        this.clothes = clothes;
    }

    public Map<String, Integer> getGrades() {
        return grades;
    }

    public void setGrades(Map<String, Integer> grades) {
        this.grades = grades;
    }
}

可以看到弄匕,里面包含了intString沽瞭,bean迁匠,ListSetMap多種類型柒瓣,則對應(yīng)通過屬性注入bean的配置文件如下:

<bean id="bag" class="com.limingjian.blog.Bag"/>
    <bean id="student" class="com.limingjian.blog.Student" >
        <property name="age" value="15"/> <!--注入簡單值-->
        <property name="addr" value="China"/> <!--注入字符串與數(shù)字并沒有不同儒搭,Spring會轉(zhuǎn)換-->
        <property name="bag" ref="bag"/>
        <property name="clothes"> <!--Set,用list可以裝配芙贫,注入后會去重搂鲫,只保留一個(gè)**校服**-->
            <list>
                <value>運(yùn)動服</value>
                <value>正裝</value>
                <value>校服</value>
                <value>校服</value>
            </list>
        </property>
        <property name="grades">
            <map>
                <entry key="語文" value="95"/>
                <entry key="數(shù)學(xué)" value="99"/>
                <entry key="英語" value="96"/>
            </map>
        </property>
        <property name="name" value="xiaoming"/>
        <property name="schedules">
            <list>
                <value>語文</value>
                <value>數(shù)學(xué)</value>
                <value>英語</value>
            </list>
        </property>
</bean>

特別的:
1.String類型的注入與int類型的注入并無區(qū)別,Spring會進(jìn)行類型轉(zhuǎn)換磺平。

  1. java.util.Set魂仍,用<list>可以裝配,注入后會去重拣挪,只保留一個(gè)校服擦酌,<list><set>可以注入數(shù)組或任何實(shí)現(xiàn)了java.util.Collection接口的類,與具體的java類型實(shí)現(xiàn)并沒有必然的聯(lián)系菠劝,這兩個(gè)標(biāo)簽甚至可以互換赊舶,但不建議這樣做。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末赶诊,一起剝皮案震驚了整個(gè)濱河市笼平,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舔痪,老刑警劉巖寓调,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锄码,居然都是意外死亡夺英,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門滋捶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痛悯,“玉大人,你說我怎么就攤上這事炬太【捏。” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵亲族,是天一觀的道長炒考。 經(jīng)常有香客問我,道長霎迫,這世上最難降的妖魔是什么斋枢? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮知给,結(jié)果婚禮上瓤帚,老公的妹妹穿的比我還像新娘描姚。我一直安慰自己,他們只是感情好戈次,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布轩勘。 她就那樣靜靜地躺著,像睡著了一般怯邪。 火紅的嫁衣襯著肌膚如雪绊寻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天悬秉,我揣著相機(jī)與錄音澄步,去河邊找鬼。 笑死和泌,一個(gè)胖子當(dāng)著我的面吹牛村缸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播武氓,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼梯皿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了聋丝?” 一聲冷哼從身側(cè)響起索烹,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤工碾,失蹤者是張志新(化名)和其女友劉穎弱睦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊额,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡况木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旬迹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火惊。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奔垦,靈堂內(nèi)的尸體忽然破棺而出屹耐,到底是詐尸還是另有隱情,我是刑警寧澤椿猎,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布惶岭,位于F島的核電站,受9級特大地震影響犯眠,放射性物質(zhì)發(fā)生泄漏按灶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一筐咧、第九天 我趴在偏房一處隱蔽的房頂上張望鸯旁。 院中可真熱鬧噪矛,春花似錦、人聲如沸铺罢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韭赘。三九已至雷袋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辞居,已是汗流浹背楷怒。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓦灶,地道東北人鸠删。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像贼陶,于是被迫代替她去往敵國和親刃泡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理碉怔,服務(wù)發(fā)現(xiàn)烘贴,斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法撮胧,類相關(guān)的語法桨踪,內(nèi)部類的語法,繼承相關(guān)的語法芹啥,異常的語法锻离,線程的語...
    子非魚_t_閱讀 31,599評論 18 399
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,135評論 2 7
  • ——謹(jǐn)以此篇獻(xiàn)給我曾經(jīng)的摯友 前些時(shí)候看了《七月與安生》的電影,勾起了許多往昔的回憶墓怀,關(guān)于友情汽纠,關(guān)...
    夏不忘我閱讀 1,185評論 0 0