1. 程式人生 > >Bean的不同配置方式比較與應用場景

Bean的不同配置方式比較與應用場景

jdb ext 小寫字母 str 類定義 ati ice control aso

基於XML配置

Bean的定義: 在XML文件中通過<bean>元素定義。

Bean的名稱: 通過<bean>的id或name屬性定義。

Bean的註入: 通過<property>子元素或通過p命名空間的動態屬性。

Bean生命過程方法:通過<bean>的init-method和destory-method屬性指定Bean實現類的方法名。最多只能指定一個初始化方法和一個銷毀方法。

Bean作用範圍: 通過<bean>的scope屬性指定。

Bean延遲初始化: 通過<bean>的lazy-init屬性指定,默認為default,繼承於<beans>的default-lazy-init設置,該值默認為false。

應用場景

1、Bean實現類來源於第三方類庫,如 DataSoure、JdbcTemplate等,因無法在類中標註註解,所以通過XML配置方式比較好。

2、命名空間的配置,如aop、context等,只能采用基於XML的配置。

基於註解配置

Bean的定義: 在Bean實現類處通過標註@Compoent或衍型類(@Repository、@Service、@Controller)定義Bean。

Bean的名稱: 通過註解的value屬性定義,如@Component("name")。默認名稱為小寫字母開頭的類名(不帶包名)name。

Bean的註入: 通過通過在成員變更或方法入參處標註@Autowired,按類型匹配自動註入。還可以配合使用@Qualifier按名稱匹配方式註入。

Bean生命過程方法:通過在目標方法上標註@PostConstruct 和@PreDestroy註解指定初始化或銷毀方法,可以定義任意多個。

Bean作用範圍: 通過在類定義處標註@Scope指定,如@Scope("prototype")

Bean延遲初始化: 通過在類定義處標註@Lazy指定,如@Lazy(true)。

應用場景

1、Bean的實現類是當前項目開發的,可以直接在Java類中使用基於註解的配置。

基於Java類配置

Bean的定義: 在標註了@Configuration的Java類中,通過在類方法上標註@Bean定義一個Bean。方法必須提供Bean的實例化邏輯。

Bean的名稱: 通過@Bean的name屬性定義,如@Bean("user")。默認名稱為方法名。

Bean的註入: 比較靈活,可以在方法處通過@Autowired使方法入參綁定Bean,然後在方法中通過代碼進行註入;還可以通過調用配置類@Bean方法進行註入。

Bean生命過程方法:通過@Bean的initMethod或destoryMethod指定一個初始化或銷毀方法。對於初始化方法來說,可以直接在方法內通過代碼的方法靈活定義初始化邏輯。

Bean作用範圍: 通過在Bean方法定義處標註@Scope指定。

Bean延遲初始化: 通過在Bean方法定義處標註@Lazy指定。

應用場景

1、基於JAVA類配置的優勢在於可以通過代碼方法控制Bean初始化的整體邏輯。如果實例化Bean的邏輯比較復雜,則比較適合基於Java類配置的方式。

基於Groovy DSL配置

Bean的定義: 在Groovy文件中通過DSL定義Bean。

Bean的名稱: 通過Groovy的DSL定義Bean的名稱(Bean的類型,Bean構建函數參數)。

Bean的註入: 比較靈活,可以在方法處通過ref()方法進行註入,如:ref("logDao")。

Bean生命過程方法:通過bean->bean.initMethod或bean.destoryMethod指定一個初始化或銷毀方法。

Bean作用範圍: 通過bean->bean.scope="prototype"指定。

Bean延遲初始化: 通過bean->bean.lazyInit=true指定。

應用場景

1、基於Groovy DSL配置的優勢在於可以通過Groovy腳本靈活控制Bean初始化的過程。如果實例化Bean的邏輯比較復雜,則比較適合基於Groovy DSL配置的方式。

Bean的不同配置方式比較與應用場景