溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Spring3.x中有幾種Bean配置方式

發(fā)布時(shí)間:2021-08-11 14:25:38 來(lái)源:億速云 閱讀:92 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)Spring3.x中有幾種Bean配置方式的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

下面分別介紹下這三種配置方式;首先定義一個(gè)用于舉例的JavaBean。

package com.chinalife.dao  
public class LoginUserDao {
	……  
	  // 用于設(shè)置初始化方法  
	public void myInit() {
	}
	// 用于設(shè)置銷(xiāo)毀方法  
	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配置中,通過(guò)<bean></bean>來(lái)定義Bean,通過(guò)id或name屬性定義Bean的名稱(chēng),如果未指定id和name屬性,Spring則自動(dòng)將全限定類(lèi)名作為Bean的名稱(chēng)。通過(guò)<property>子元素或者p命名空間的動(dòng)態(tài)屬性為Bean注入值。還可以通過(guò)<bean>的init-method和destory-method屬性指定Bean實(shí)現(xiàn)類(lèi)的方法名來(lái)設(shè)置生命過(guò)程方法(最多指定一個(gè)初始化方法和銷(xiāo)毀方法)。通過(guò)<bean>的scope指定Bean的作用范圍。聽(tīng)過(guò)<bean>的lazy-init屬性指定是否延遲初始化。

當(dāng)Bean的實(shí)現(xiàn)類(lèi)來(lái)源于第三方類(lèi)庫(kù),比如DataSource、HibernateTemplate等,無(wú)法在類(lèi)中標(biāo)注注解信息,只能通過(guò)XML進(jìn)行配置;而且命名空間的配置,比如aop、context等,也只能采用基于XML的配置。

二、基于注解的配置

@Scope(“prototype”)  
@Lazy(true)  
@Component(“l(fā)oginUserDao”)  
public class LoginUserDao {  
  ……  
  // 用于設(shè)置初始化方法  
  @PostConstruct 
  public void myInit() {  
 
  }  
 
  // 用于設(shè)置銷(xiāo)毀方法  
  @PreDestroy 
  public void myDestroy() {  
  }  
}

在Bean實(shí)現(xiàn)類(lèi)中通過(guò)一些Annotation來(lái)標(biāo)注Bean類(lèi):

·@Component:標(biāo)注一個(gè)普通的SpringBean類(lèi)(可以指定Bean名稱(chēng),未指定時(shí)默認(rèn)為小寫(xiě)字母開(kāi)頭的類(lèi)名)

·@Controller:標(biāo)注一個(gè)控制器類(lèi)

·@Service:標(biāo)注一個(gè)業(yè)務(wù)邏輯類(lèi)

·@Repository:標(biāo)注一個(gè)DAO類(lèi)

通過(guò)在成員變量或者方法入?yún)⑻帢?biāo)注@Autowired按類(lèi)型匹配注入,也可以使用@Qualifier按名稱(chēng)配置注入。通過(guò)在方法上標(biāo)注@PostConstrut和PreDestroy注解指定的初始化方法和銷(xiāo)毀方法(可以定義任意多個(gè))。通過(guò)@Scope(“prototype”)指定Bean的作用范圍。通過(guò)在類(lèi)定義處標(biāo)注@Lazy(true)指定Bean的延遲加載。

當(dāng)Bean的實(shí)現(xiàn)類(lèi)是當(dāng)前項(xiàng)目開(kāi)發(fā)的,可以直接在Java類(lèi)中使用基于注解的配置,配置比較簡(jiǎn)單。

三、基于Java類(lèi)配置

@Configuration 
public class Conf {  
  @Scope(“prototype”)  
  @Bean(“l(fā)oginUserDao”)  
  public LoginUserDao loginUserDao() {  
    return new LoginUserDao();  
  }  
}

在標(biāo)注了@Configuration的java類(lèi)中,通過(guò)在類(lèi)方法標(biāo)注@Bean定義一個(gè)Bean。方法必須提供Bean的實(shí)例化邏輯。通過(guò)@Bean的name屬性可以定義Bean的名稱(chēng),未指定時(shí)默認(rèn)名稱(chēng)為方法名。在方法處通過(guò)@Autowired使方法入?yún)⒔壎˙ean,然后在方法中通過(guò)代碼進(jìn)行注入;也可以調(diào)用配置類(lèi)的@Bean方法進(jìn)行注入。通過(guò)@Bean的initMethod或destroyMethod指定一個(gè)初始化或者銷(xiāo)毀方法。通過(guò)Bean方法定義處標(biāo)注@Scope指定Bean的作用范圍。通過(guò)在Bean方法定義處標(biāo)注@Lazy指定Bean的延遲初始化。

當(dāng)實(shí)例化Bean的邏輯比較復(fù)雜時(shí),則比較適合基于Java類(lèi)配置的方式。

感謝各位的閱讀!關(guān)于“Spring3.x中有幾種Bean配置方式”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI