spring之@Component,@Service,@Controller,@Repository

首先,spring中注入即便用setter方法進行注入,對對象,變量,類的注入,都須要在聲明以後,(spring掃描會在有具體註解的地方自動建立對象,並添加註入(經過setter方法))。spring

使用ClassPathXmlApplicationContext建立Bean容器。ClassPathXmlApplicationContext從類路徑中加載指定的Xml配置文件並完成啓動。函數

@Service用於標註業務層組件,@Controller用於標註控制層組件(如struts中的action),@Repository用於標註數據訪問組件,即DAO組件,而@Component泛指組件,當組件很差歸類的時候,咱們可使用這個註解進行標註。當使用這些組件標註類的成員變量進行注入的時候,就不須要再生成set、get方法了,spring會自動注入。ui

@Service註解做用都是將一個類定義爲一個Bean,除此以外再無其餘做用。spa

@Repository註解做用除此以外還有啓用與spring數據訪問相關聯的其餘功能。對象

而後在容器中查找符合該類型的spring管理的Bean,並經過調用setter方法將找到的Bean注入到目標Bean。接口

setter注入是在Bean實例建立完成以後執行的。經過調用與Bean的配置元數據中定義的全部屬性相對應的setter方法注入這些屬性。另外,構造函數的注入在組件建立期間被執行。字符串

 

在接口前面標上@Autowired和@Qualifier註釋使得接口能夠被容器注入,當接口存在兩個實現類(即名字相同的兩個類)的時候必須指定其中一個來注入(在使用的時候必需要制定其中一個(須要注意的是@Qualifier的參數名稱必須爲咱們以前定義@Service註解的名稱之一!)),使用實現類首字母小寫的字符串來注入,不然能夠省略,只寫@Autowired。get

將 @Autowired寫在字段上或者setter方法上就能夠進行注入了。it

@Resource的做用至關於@Autowired,只不過@Autowired按byType自動注入,而@Resource默認按 byName自動注入罷了。@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource註解的name屬性解析爲bean的名字,而type屬性則解析爲bean的類型。因此若是使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。若是既不指定name也不指定type屬性,這時將經過反射機制使用byName自動注入策略。 io

Resource 註釋類位於 Spring 發佈包的 lib/j2ee/common-annotations.jar 類包中,所以在使用以前必須將其加入到項目的類庫中。 

@Autowired 與@Resource的區別: 一、 @Autowired與@Resource均可以用來裝配bean.均可以寫在字段上,或寫在setter方法上。 二、 @Autowired默認按類型裝配(這個註解是屬業spring的),默認狀況下必需要求依賴對象必須存在,若是要容許null值,能夠設置它的required屬性爲false,如:@Autowired(required=false),若是咱們想使用名稱裝配能夠結合@Qualifier註解進行使用。 三、@Resource(這個註解屬於J2EE的),默認安裝名稱進行裝配,名稱能夠經過name屬性進行指定,若是沒有指定name屬性,當註解寫在字段上時,默認取字段名進行安裝名稱查找,若是註解寫在setter方法上默認取屬性名進行裝配。當找不到與名稱匹配的bean時才按照類型進行裝配。可是須要注意的是,若是name屬性一旦指定,就只會按照名稱進行裝配。 推薦使用:@Resource註解在字段上,這樣就不用寫setter方法了,而且這個註解是屬於J2EE的,減小了與spring的耦合。這樣代碼看起就比較優雅。 通常狀況下,咱們無需使用相似於 @Resource(type=Car.class) 的註釋方式,由於 Bean 的類型信息能夠經過 Java 反射從代碼中獲取。  

相關文章
相關標籤/搜索