1. 程式人生 > >關於Spring修飾Bean對象的註解筆記

關於Spring修飾Bean對象的註解筆記

註意 兩種 賦值 china sys tro 修飾 https 依據

Spring容器中描述bean的方式有兩種,一種是基於xml方式,一種是基於註解方式,現階段基於註解方式描述Bean元素已經成為一種趨勢.Spring中常用的bean註解有如下幾種:

1.修飾Bean對象的註解。(xml中描述bean使用

  • @Configuration(描述Bean為一個配置對象)spring-configs.xml

  • @Component(描述Bean為一個一般組件組件)

  • @Controller(描述Bean為一個控制層對象)

  • @Service (描述Bean為一個業務層對象)

  • @Respository(描述Bean為一個持久層對象)

以上註解對Spring框架而言, 它描述的類都是一個Bean對象,相當於xml文件中的標簽的作用

,Spring對其處理的方式都是一樣的,只是表面上代表的含義不同而已.


2.定義Bean對象作用域的註解。

  • @Scope (描述bean的作用域)

3.定義bean對象的加載策略(按需加載)

  • @Lazy(定義bean對象是否延遲加載)

4.指定自定義Bean對象生命周期方法 (xml中使用)

  • @PostConstruct (描述生命周期開始要調用的初始化的方法)

  • @PreDestroy (描述生命周期結束時要調用的銷毀的方法)

  • 說明:描述生命周期方法的註解應用時應在JDK1.7以上版本


5.自動裝配註解(為屬性註入值):類似xml階段中bean標簽的autowire屬性

  • @Autowire (一般修飾構造方法或set方法或屬性,默認按類型裝配)

  • @Qualifier (配合Autowire註解,按名字進行裝配,尤其是出類型相同的bean時,可以指定具體bean)

  • @Resource (一般修飾set方法或屬性,默認按名字裝配)


6.Spring Bean 註解應用

在spring應用中假如使用註解描述bean,定義bean的依賴機制,首先需要配置類的掃描機制(掃描某個或多個包中的類),spring掃描到這個類以後,會檢測類上是否有spring中定義的相關註解的描述(例@Controller,@Service),假如有spring底層會通過反射構建此類型的對象,然後進行管理.


7.Bean對象聲明註解應用

項目應用中我們自己定義的類假如需要由Spring IOC管理,可以通過相關註解進行描述,例如:

  • @Configuration(用於描述配置類)

  • @Component (描述通用性組件)

  • @Controller (描述MVC中控制層組件)

  • @Service (描述MVC 中業務層組件)

  • @Repository(描述MVC中持久層組件)

說明:這些組件實現的功能是一樣的,只是應用的業務場景不同


8.Bean對象作用域註解應用

Spring 管理的Bean一般都會指定一個作用域,借助註解定義作用域時需要
使用@Scope,註解中常用值singleton或者prototype

  • singeton 表示單例作用域,每次獲取的對象都是一樣的。

  • prototype 表示多例作用域,每次獲取的對象都是不同的。


9.Bean對象生命周期方法註解應用

Spring 管理的Bean對象都有生命周期,但不一定都有生命周期方法,假如有些Bean需要指定生命周期方法,基於註解實現時可以借助@PostConstruct@ PreDestroy,這個兩個註解都屬於JDK中的API,使用時需要註意版本問題 , 生命周期方法註解需要在JDK1.7以後版本使用.

@Scope//默認是singleton
@Component
public class OpenDataSource {
    /**使用此註解修飾的方法為對象生命周期初始化方法*/
    @PostConstruct
    public void init(){
        System.out.println("初始化池對象");
    }
    /**使用此註解修飾的方法為對象生命周期銷毀方法*/
    @PreDestroy
    public void destory(){
        System.out.println("銷毀池對象");
    }
}

10.Bean對象自動裝配註解應用

Spring 管理的Bean對象可以采用自動裝配機制為屬性賦值.基於註解方式進行自動裝配,一般需要使用@Autowired,@Qualifier,@Resource這些註解.

  • @Autowired 可以修飾屬性,構造方法,set方法,默認依據類型(屬性類型,參數類型)為屬性註入值.假如Spring容器中有多個相同類型的值,會參考名字進行匹配查找(屬性名,set方法參數名,構造方法參數名),假如名字有相同的則註入,沒有相同的會註入失敗.

  • @Qualifier** 配合@Autowired註解按名字**為屬性註入值.

  • @Resource 可以修飾屬性或set方法,默認依據名字(屬性名,set方法名)為屬性註入值.假如spring容器中有名字相同但類型不同的bean就會註入失敗,當沒有找到對應名字的bean對象,此時會依據類型再次進行查找,假如相同類型則直接註入,當有多個相同類型可能會註入失敗(假如是按set方法進行註入 ,依據方法名字沒找到,還會按參數類型查找,對應類型有多個,還可能會按參數名查找,假如沒找對應的,則註入失敗).

關於Spring修飾Bean對象的註解筆記