@Controller 用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 對象。分發處理器將會掃描使用了該註解的類的方法。通俗來講,被Controller標記的類就是一個控制器,這個類中的方法,就是相應的動做。java
@RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。好比圖一中,跳轉到登陸頁面的路徑就是localhost:8080/xxx-war/user/toLoginspring
例:@Service("userService")註解是告訴spring,當Spring要建立UserServiceImpl的的實例時,bean的名字必須叫作"userService",這樣當Action須要使用UserServiceImpl的的實例時,就能夠由Spring建立好的"userService",而後注入給Action。數據庫
@Repository(value="userDao")註解是告訴Spring,讓Spring建立一個名字叫「userDao」的UserDaoImpl實例。
當Service須要使用Spring建立的名字叫「userDao」的UserDaoImpl實例時,就可使用@Resource(name = "userDao")註解告訴Spring,Spring把建立好的userDao注入給Service便可。spring-mvc
@Autowired能夠對成員變量、方法和構造函數進行標註,來完成自動裝配的工做,咱們也要清楚,@Autowired是根據類型進行自動裝配的。mvc
@component (把普通pojo實例化到spring容器中,至關於配置文件中的<bean id="" class=""/>)app
spring不但支持本身定義的@Autowired註解,還支持幾個由JSR-250規範定義的註解,它們分別是@Resource、@PostConstruct以及@PreDestroy。
@Resource的做用至關於@Autowired,只不過@Autowired按byType自動注入,而@Resource默認按 byName自動注入罷了。@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource註解的name屬性解析爲bean的名字,而type屬性則解析爲bean的類型。因此若是使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。若是既不指定name也不指定type屬性,這時將經過反射機制使用byName自動注入策略。
@Resource裝配順序
1. 若是同時指定了name和type,則從Spring上下文中找到惟一匹配的bean進行裝配,找不到則拋出異常
2. 若是指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
3. 若是指定了type,則從上下文中找到類型匹配的惟一bean進行裝配,找不到或者找到多個,都會拋出異常
4. 若是既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;若是沒有匹配,則回退爲一個原始類型進行匹配,若是匹配則自動裝配;函數
@Autowired 與@Resource的區別:ui
一、 @Autowired與@Resource均可以用來裝配bean. 均可以寫在字段上,或寫在setter方法上。spa
二、 @Autowired默認按類型裝配(這個註解是屬業spring的),默認狀況下必需要求依賴對象必須存在,若是要容許null值,能夠設置它的required屬性爲false,如:@Autowired(required=false) ,若是咱們想使用名稱裝配能夠結合@Qualifier註解進行使用,以下:.net
三、@Resource(這個註解屬於J2EE的),默認按照名稱進行裝配,名稱能夠經過name屬性進行指定,若是沒有指定name屬性,當註解寫在字段上時,默認取字段名進行安裝名稱查找,若是註解寫在setter方法上默認取屬性名進行裝配。當找不到與名稱匹配的bean時才按照類型進行裝配。可是須要注意的是,若是name屬性一旦指定,就只會按照名稱進行裝配。
推薦使用:@Resource註解在字段上,這樣就不用寫setter方法了,而且這個註解是屬於J2EE的,減小了與spring的耦合。這樣代碼看起就比較優雅。