關於Spring修飾Bean對象的註解筆記
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文件中的
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對象的註解筆記