對於spring實現bean信息定義目標,spring提供了三種方式:
基於XML
,
基於註解
,以及
基於java類
本人是使用的基於註解的形式比較多的,一直沒有使用過基於xml和基於java類的,因此不少地方仍是不會的: java
經過資料,比較了三種方式的在不一樣環境的優劣 spring
- 適合於bean實現類來源於第三方類庫,如DataSource , JdbcTemplate等,由於如法在類中標註註解,全部經過xml文件進行註解是比較適合的一種方式。
- 另外,命名空間的配置,如aop context 等 只能基於xml配置,,,,
- bean的實現類就在當前項目開發中,能夠直接在java類中使用基於註解的配置
- 基於Java類配置的優點在於能夠經過代碼方式控制bean初始化的整個邏輯,全部若是實例化bean的邏輯比較複雜,則比較適合使用基於Java類配置的方式。。。。。。。
對於三種形式的比較
- 基於xml: 在xml文件中經過<bean>元素定義bean 例如 <bean class="com.boss.test"/>
- 基於註解:經過註解 @Compoent 或者衍型類(@Repository,@Service 以及 @Controller)定義bean
- 基於java類配置:因爲使用狀況很少,就不作介紹了。。。。。。
- 基於XML 經過<bean> 的id或者name屬性定義
- 基於註解: 經過註解的value屬性
- 基於XML 經過<property>子元素或者經過p命名空間的動態屬性 p:userDao-ref="userDao"
- 基於註解: 經過@Autowired
- 基於xml init-method 和 destroy-method 屬性指定bean實現類的方法名,最多隻能指定一個初始化方法和一個銷燬方法。
- 基於註解: 經過@PostConstruct 和 @PreDestroy 註解來指定初始化或者銷燬方法。 能夠定義任意多個方法。
- 基於XML scope屬性
- 基於註解: @Scope("")
- 基於XML 經過lazy-init 屬性指定,默認是default 繼承於beans的default-lazy-init設置,該值默認爲false
- 基於註解 @Lazy