Spring三種bean裝配方案

首先來(lái)個(gè)簡(jiǎn)單且古老的Java類吧

public class SpringBean {
    public void say(){
        System.out.println("這是一個(gè)SpringBean");
    }
}

1、當(dāng)然了聋呢,第一種必須是我們最智能話的裝配方案拨齐,自動(dòng)裝配了。

在自動(dòng)裝配的時(shí)候颠猴,需要保證對(duì)進(jìn)行注解操作。
@Component//一種通用的組件描述
@Controller//通常用于web中的控制器組件上
@Service//通常用于service服務(wù)組件上
@Repository//通常用于數(shù)據(jù)訪問(wèn)及操作組件

@Component//一種通用的組件描述
//@Controller//通常用于web中的控制器組件上
//@Service//通常用于service服務(wù)組件上
//@Repository//通常用于數(shù)據(jù)訪問(wèn)及操作組件
//一次只能使用一個(gè)喲小染,千萬(wàn)不要像我這樣進(jìn)行注解翘瓮,為了減少代碼量我才把他們放在了一起。
public class SpringBean {
    public void say(){
        System.out.println("這是一個(gè)SpringBean");
    }
}

自動(dòng)裝配方案中如何在注解沒(méi)有明確指定名稱的話裤翩,則默認(rèn)bean的ID為類名且首字母自動(dòng)變成小寫字母资盅,如果指定了名稱的話則以指定的名稱作為bean的ID。

@Component("component")//一種通用的組件描述
//@Controller("controller")//通常用于web中的控制器組件上
//@Service("service")//通常用于service服務(wù)組件上
//@Repository("repository")//通常用于數(shù)據(jù)訪問(wèn)及操作組件
public class SpringBean {
    public void say(){
        System.out.println("這是一個(gè)SpringBean");
    }
}

1.1 XML文件配置自動(dòng)裝配方案
<?xml version="1.0" encoding="UTF-8"?>
<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">
  <!--啟用自動(dòng)掃描功能,掃描“cn.sharek.test”包下所有帶注解的POJO(Plain Old Java Object呵扛,簡(jiǎn)單且古老的Java對(duì)象)-->
    <context:component-scan base-package="cn.sharek.test"/>
</beans>
1.2 JavaConfig配置自動(dòng)裝配方案
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration//表明該類是Spring的配置類
@ComponentScan("cn.sharek.test")//啟用自動(dòng)掃描功能每庆,掃描“cn.sharek.test”包下所有帶注解的POJO(Plain Old Java Object,簡(jiǎn)單且古老的Java對(duì)象
public class SpringRootConfig {
}

沒(méi)有看錯(cuò)今穿,通過(guò)Java代碼實(shí)現(xiàn)Spring的配置工作就是這么簡(jiǎn)單缤灵,但它并不是萬(wàn)能的,直到現(xiàn)在依然有部分的配置(Spring Web FLow....)無(wú)法通過(guò)Java代碼實(shí)現(xiàn)荣赶,必須借助于XML文件凤价。不要著急鸽斟,文章結(jié)尾會(huì)介紹一種混合配置拔创,XML中導(dǎo)入Java代碼的配置,Java代碼中導(dǎo)入XML的配置都是可以的富蓄。

2剩燥、通過(guò)XML文件,手動(dòng)編輯bean

接下來(lái)的是通過(guò)XML手動(dòng)編輯bean立倍,當(dāng)然了灭红,繼續(xù)使用前面那個(gè)用來(lái)被我們蹂躪的POJO。

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!--id指定bean的名稱口注,class指定是那個(gè)類-->
    <bean id="springBean" class="SpringBean"/>
</beans>

現(xiàn)在:這個(gè)bean已經(jīng)可以使用了变擒。

如果這個(gè)bean沒(méi)有屬性需要設(shè)置或者注入,且沒(méi)有唯一的帶有參數(shù)的構(gòu)造方法的話那么這么做是正確的寝志。當(dāng)有唯一的帶參構(gòu)造方法娇斑,且沒(méi)有實(shí)現(xiàn)無(wú)參構(gòu)造方法的那么這么做絕對(duì)是一個(gè)錯(cuò)誤的選擇,這時(shí)候你需要為構(gòu)造參數(shù)設(shè)置屬性值或者注入屬性值材部。
看一看上面所描述的情況該如何去做:

public class SpringBean {
    public SpringBean(String str) {
        System.out.println("你設(shè)置了str:晾隆!乐导!它的值是:"+str);
    }

    public void say(){
        System.out.println("這是一個(gè)SpringBean");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <bean id="springBean" class="SpringBean">
        <constructor-arg value="一只二哈"/>
    </bean>
</beans>

當(dāng)然了苦丁,我們?cè)谶@里不考慮那些多參數(shù)的情況,因?yàn)槲覀冊(cè)谶@是在將bean的裝配方案物臂,以后會(huì)將多參數(shù)的情況該如何去做的旺拉,不要著急。

3棵磷、通過(guò)JavaConfig類账阻,手動(dòng)編輯bean

我比較喜歡這種,通過(guò)來(lái)管理類泽本。

@Configuration//表明該類是Spring的配置類
public class SpringRootConfig {
    @Bean//很簡(jiǎn)單
    public SpringBean springBean(){
        return new SpringBean();
    }
}

方法名就是bean的ID淘太,該變方法名稱就可改變bean的ID。當(dāng)然了也可已通過(guò)注解的name屬性來(lái)指定

@Configuration//表明該類是Spring的配置類
public class SpringRootConfig {
    @Bean(name="happy")//很簡(jiǎn)單
    public SpringBean springBean(){
        return new SpringBean();
    }
}

到此就該結(jié)束了。

No蒲牧,No撇贺,No

還有一件有趣的事情

當(dāng)然是混合配置了

在JavaConfig類中混入JavaConfig類

@Configuration//表明該類是Spring的配置類
@Import(ServiceConfig.class)//導(dǎo)入一個(gè)配置類
//@Import({ServiceConfig.class,ControllerConfig.class})//導(dǎo)入多個(gè)配置類
//@Import只能出現(xiàn)一次喲
public class SpringRootConfig {
}

在JavaConfig類中混入JavaConfig類及XMl文件

當(dāng)然了只混入XML文件也是可行的,這沒(méi)有錯(cuò)冰抢。

@Configuration//表明該類是Spring的配置類
@Import(ServiceConfig.class)//導(dǎo)入一個(gè)配置類
@ImportResource("classpath:application.xml")//導(dǎo)入一個(gè)XML配置文件
public class SpringRootConfig {
}

在XML文件中混入XMl文件

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <import resource="service.xml"/>
    <import resource="controller.xml"/>
</beans>

在XML文件中JavaConfig

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!--導(dǎo)入ServiceConfig-->
    <bean class="ServiceConfig"/>
    <!--導(dǎo)入ControllerConfig-->
    <bean class="ControllerConfig"/>
</beans>

混合配置似乎看起來(lái)很好用松嘶,能夠?qū)⒁粋€(gè)文件按照功能,或者業(yè)務(wù)進(jìn)行拆分挎扰。但需要注意的是翠订,千萬(wàn)千萬(wàn)不能出現(xiàn)重復(fù)ID的bean。不然遵倦,Spring會(huì)不清楚你在使用哪一個(gè)bean尽超。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梧躺,隨后出現(xiàn)的幾起案子似谁,更是在濱河造成了極大的恐慌,老刑警劉巖掠哥,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巩踏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡续搀,警方通過(guò)查閱死者的電腦和手機(jī)塞琼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)禁舷,“玉大人彪杉,你說(shuō)我怎么就攤上這事¢涣耍” “怎么了在讶?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)霜大。 經(jīng)常有香客問(wèn)我构哺,道長(zhǎng),這世上最難降的妖魔是什么战坤? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任曙强,我火速辦了婚禮,結(jié)果婚禮上途茫,老公的妹妹穿的比我還像新娘碟嘴。我一直安慰自己,他們只是感情好囊卜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布娜扇。 她就那樣靜靜地躺著错沃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雀瓢。 梳的紋絲不亂的頭發(fā)上枢析,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音刃麸,去河邊找鬼醒叁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泊业,可吹牛的內(nèi)容都是我干的把沼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吁伺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饮睬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起箱蝠,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤续捂,失蹤者是張志新(化名)和其女友劉穎垦垂,沒(méi)想到半個(gè)月后宦搬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劫拗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年间校,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片页慷。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憔足,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酒繁,到底是詐尸還是另有隱情滓彰,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布州袒,位于F島的核電站揭绑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏郎哭。R本人自食惡果不足惜他匪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夸研。 院中可真熱鬧邦蜜,春花似錦、人聲如沸亥至。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至絮供,卻和暖如春关筒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杯缺。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蒸播, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萍肆。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓袍榆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親塘揣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子包雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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