Spring 3.x中三種Bean配置方式比較詳解
以前Java框架基本都采用了XML作為配置文件,但是現(xiàn)在Java框架又不約而同地支持基于Annotation的“零配置”來代替XML配置文件,Struts2、Hibernate、Spring都開始使用Annotation來代替XML配置文件了;而在Spring3.x提供了三種選擇,分別是:基于XML的配置、基于注解的配置和基于Java類的配置。
下面分別介紹下這三種配置方式;首先定義一個(gè)用于舉例的JavaBean。
package com.chinalife.dao public class LoginUserDao { …… // 用于設(shè)置初始化方法 public void myInit() { } // 用于設(shè)置銷毀方法 public void myDestroy() { } }
一、 基于XML的配置
<bean id=“l(fā)oginUserDao” class=“com.chinalife.dao.impl.LoginUserDaoImpl” lazy-init=“true” init-method=“myInit” destroy-method=“myDestroy” scope=“prototype”> …… </bean>
在XML配置中,通過<bean></bean>來定義Bean,通過id或name屬性定義Bean的名稱,如果未指定id和name屬性,Spring則自動(dòng)將全限定類名作為Bean的名稱。通過<property>子元素或者p命名空間的動(dòng)態(tài)屬性為Bean注入值。還可以通過<bean>的init-method和destory-method屬性指定Bean實(shí)現(xiàn)類的方法名來設(shè)置生命過程方法(最多指定一個(gè)初始化方法和銷毀方法)。通過<bean>的scope指定Bean的作用范圍。聽過<bean>的lazy-init屬性指定是否延遲初始化。
當(dāng)Bean的實(shí)現(xiàn)類來源于第三方類庫,比如DataSource、HibernateTemplate等,無法在類中標(biāo)注注解信息,只能通過XML進(jìn)行配置;而且命名空間的配置,比如aop、context等,也只能采用基于XML的配置。
二、基于注解的配置
@Scope(“prototype”) @Lazy(true) @Component(“l(fā)oginUserDao”) public class LoginUserDao { …… // 用于設(shè)置初始化方法 @PostConstruct public void myInit() { } // 用于設(shè)置銷毀方法 @PreDestroy public void myDestroy() { } }
在Bean實(shí)現(xiàn)類中通過一些Annotation來標(biāo)注Bean類:
·@Component:標(biāo)注一個(gè)普通的SpringBean類(可以指定Bean名稱,未指定時(shí)默認(rèn)為小寫字母開頭的類名)
·@Controller:標(biāo)注一個(gè)控制器類
·@Service:標(biāo)注一個(gè)業(yè)務(wù)邏輯類
·@Repository:標(biāo)注一個(gè)DAO類
通過在成員變量或者方法入?yún)⑻帢?biāo)注@Autowired按類型匹配注入,也可以使用@Qualifier按名稱配置注入。通過在方法上標(biāo)注@PostConstrut和PreDestroy注解指定的初始化方法和銷毀方法(可以定義任意多個(gè))。通過@Scope(“prototype”)指定Bean的作用范圍。通過在類定義處標(biāo)注@Lazy(true)指定Bean的延遲加載。
當(dāng)Bean的實(shí)現(xiàn)類是當(dāng)前項(xiàng)目開發(fā)的,可以直接在Java類中使用基于注解的配置,配置比較簡(jiǎn)單。
三、基于Java類配置
@Configuration public class Conf { @Scope(“prototype”) @Bean(“l(fā)oginUserDao”) public LoginUserDao loginUserDao() { return new LoginUserDao(); } }
在標(biāo)注了@Configuration的java類中,通過在類方法標(biāo)注@Bean定義一個(gè)Bean。方法必須提供Bean的實(shí)例化邏輯。通過@Bean的name屬性可以定義Bean的名稱,未指定時(shí)默認(rèn)名稱為方法名。在方法處通過@Autowired使方法入?yún)⒔壎˙ean,然后在方法中通過代碼進(jìn)行注入;也可以調(diào)用配置類的@Bean方法進(jìn)行注入。通過@Bean的initMethod或destroyMethod指定一個(gè)初始化或者銷毀方法。通過Bean方法定義處標(biāo)注@Scope指定Bean的作用范圍。通過在Bean方法定義處標(biāo)注@Lazy指定Bean的延遲初始化。
當(dāng)實(shí)例化Bean的邏輯比較復(fù)雜時(shí),則比較適合基于Java類配置的方式。
總結(jié)
以上就是本文關(guān)于Spring 3.x中三種Bean配置方式比較詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Java中String、StringBuffer、StringBuilder的區(qū)別介紹
這篇文章主要介紹了Java中String、StringBuffer、StringBuilder的區(qū)別介紹,本文講解了可變與不可變、是否多線程安全、gBuilder與StringBuffer共同點(diǎn)等內(nèi)容,需要的朋友可以參考下2015-06-06java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別
這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下2017-08-08springsecurity輕松實(shí)現(xiàn)角色權(quán)限的示例代碼
這篇文章主要介紹了springsecurity輕松實(shí)現(xiàn)角色權(quán)限的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03spring?boot?動(dòng)態(tài)生成接口實(shí)現(xiàn)類的場(chǎng)景分析
本文不具體介紹動(dòng)態(tài)代理,主要看一下它在springboot項(xiàng)目中的實(shí)際應(yīng)用,下面我們模仿feign來實(shí)現(xiàn)一個(gè)調(diào)用三方接口的?httpclient,感謝的朋友跟隨小編一起看看吧2021-11-11Spring?MVC各種參數(shù)進(jìn)行封裝的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Spring?MVC各種參數(shù)進(jìn)行封裝的相關(guān)資料,SpringMVC內(nèi)置多種數(shù)據(jù)類型轉(zhuǎn)換器,可以根據(jù)請(qǐng)求中的參數(shù)與后端控制器方法的參數(shù)的關(guān)系為我們實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)封裝,需要的朋友可以參考下2023-06-06Java Comparable及Comparator接口區(qū)別詳解
這篇文章主要介紹了Java Comparable及Comparator接口區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot中使用HTTP客戶端工具Retrofit
這篇文章主要為大家介紹了SpringBoot中使用HTTP客戶端工具Retrofit方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06