Spring 3.x中三種Bean配置方式比較


以前Java框架基本都采用了XML作為配置文件,但是現在Java框架又不約而同地支持基於Annotation的“零配置”來代替XML配置文件,Struts2、Hibernate、Spring都開始使用Annotation來代替XML配置文件了;而在Spring 3.x提供了三種選擇,分別是:基於XML的配置、基於注解的配置和基於Java類的配置。

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

 
  1. package  com.chinalife.dao   
  2. public class LoginUserDao {   
  3.     ……   
  4.     // 用於設置初始化方法   
  5.     public void myInit() {   
  6.   
  7.     }   
  8.   
  9.     // 用於設置銷毀方法   
  10.     public void myDestroy() {   
  11.     }   
  12. }   
 
 
 
 
 

一、   基於XML的配置

 

  1. <bean id=“loginUserDao” class=“com.chinalife.dao.impl.LoginUserDaoImpl”  
  2.         lazy-init=“true” init-method=“myInit” destroy-method=“myDestroy”  
  3.         scope=“prototype”>  
  4.         ……   
  5. </bean>  
 

在XML配置中,通過<bean> </bean>來定義Bean,通過id或name屬性定義Bean的名稱,如果未指定id和name屬性,Spring則自動將全限定類名作為Bean的名稱。通過<property>子元素或者p命名空間的動態屬性為Bean注入值。還可以通過<bean>的init-method和destory-method屬性指定Bean實現類的方法名來設置生命過程方法(最多指定一個初始化方法和銷毀方法)。通過<bean>的scope指定Bean的作用范圍。聽過<bean>的lazy-init屬性指定是否延遲初始化。

當Bean的實現類來源於第三方類庫,比如DataSource、HibernateTemplate等,無法在類中標注注解信息,只能通過XML進行配置;而且命名空間的配置,比如aop、context等,也只能采用基於XML的配置。

 

二、   基於注解的配置

 

  1. @Scope(“prototype”)   
  2. @Lazy(true)   
  3. @Component(“loginUserDao”)   
  4. public class LoginUserDao {   
  5.     ……   
  6.     // 用於設置初始化方法   
  7.     @PostConstruct  
  8.     public void myInit() {   
  9.   
  10.     }   
  11.   
  12.     // 用於設置銷毀方法   
  13.     @PreDestroy  
  14.     public void myDestroy() {   
  15.     }   
  16. }   
 

在Bean實現類中通過一些Annotation來標注Bean類:

·@Component:標注一個普通的Spring Bean類(可以指定Bean名稱,未指定時默認為小寫字母開頭的類名)

·@Controller:標注一個控制器類

·@Service:標注一個業務邏輯類

·@Repository:標注一個DAO類

通過在成員變量或者方法入參處標注@Autowired按類型匹配注入,也可以使用@Qualifier按名稱配置注入。通過在方法上標注@PostConstrut和PreDestroy注解指定的初始化方法和銷毀方法(可以定義任意多個)。通過@Scope(“prototype”)指定Bean的作用范圍。通過在類定義處標注@Lazy(true)指定Bean的延遲加載。

當Bean的實現類是當前項目開發的,可以直接在Java類中使用基於注解的配置,配置比較簡單。

 

三、基於Java類配置

 

  1. @Configuration  
  2. public class Conf {   
  3.     @Scope(“prototype”)   
  4.     @Bean(“loginUserDao”)   
  5.     public LoginUserDao loginUserDao() {   
  6.         return new LoginUserDao();   
  7.     }   
  8. }   
 

在標注了@Configuration的java類中,通過在類方法標注@Bean定義一個Bean。方法必須提供Bean的實例化邏輯。通過@Bean的name屬性可以定義Bean的名稱,未指定時默認名稱為方法名。在方法處通過@Autowired使方法入參綁定Bean,然后在方法中通過代碼進行注入;也可以調用配置類的@Bean方法進行注入。通過@Bean的initMethod或destroyMethod指定一個初始化或者銷毀方法。通過Bean方法定義處標注@Scope指定Bean的作用范圍。通過在Bean方法定義處標注@Lazy指定Bean的延遲初始化。

當實例化Bean的邏輯比較復雜時,則比較適合基於Java類配置的方式。

來源:http://www.javawxs.com/?p=561


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM