springMvc的常用注解 :
@Controller
:用於標記在一個類上,使用它標記的類就是一個springmcv Controller對象,分發處理器將會掃描使用了該注解
的類的方法,並檢測該方法是否使用了@RequestMapping注解。@Controller只是定義
了一個控制器類,而使用了@RequestMapping注解的方法才是真正處理請求的處理器
@RequestMapping
:用於標記在一個方法或類上,用來處理請求地址映射的注解,用於類上,表示類中所有響應請求處理的方法都是以該地址
作為父路徑,返回值會通過視圖解析器解析為實際的物理視圖,然后做轉發操作
屬性:
value:指定請求的實際地址
method: 指定請求的method類型
consumes: 指定處理請求的內容提交類型(Content-Type),例如application/josn,text/html
produces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
param: 指定request中必須包含的參數值
headers:指定request中必須包含某些指定的header值,才能讓改方法處理請求
@Resource和@Autowired
@Resource和@Autowired都是做bean的注入時使用,其實@Resource並不是Spring的注解,它的包是javax.annotation.Resource,需要導入,但是Spring支持該注解的注入。
1、共同點
兩者都可以寫在字段和setter方法上。兩者如果都寫在字段上,那么就不需要再寫setter方法。
2、不同點
(1)@Autowired
@Autowired為Spring提供的注解,需要導入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
返回值會通過視圖解析器解析為實際的物理視圖,然后做轉發操作
@Autowired注解是按照類型(byType)裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它的required屬 性為false。如果我們想使用按照名稱(byName)來裝配,可以結合@Qualifier注解一起使用。如下:
public class HelloWorld{
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}
(2)@Resource默認按照ByName自動注入,由J2EE提供,需要導入包javax.annotation.Resource。
@Resource有兩個重要的屬性:name和type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為 bean的類型。
所以,如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不制定name也不制定type屬性,
這時將通過反射機制使用byName自動注入策略。
@PathVariable
用於將請求URL中的模板變量映射到功能處理方法的參數上,即取出uri模板中的變量作為參數。
@RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)
public String getLogin(@PathVariable("userId") String userId,
@PathVariable("roleId") String roleId){
System.out.println("User Id : " + userId);
System.out.println("Role Id : " + roleId);
return "hello";
}
@CookieValue
作用:用來獲取Cookie中的值;
參數: value:參數名稱 required:是否必須 defaultValue:默認值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("JSESSIONID = " + sessionId);
return "success";
}
@RequestParam
@RequestParam用於將請求參數區數據映射到功能處理方法的參數上,用例:
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("id") int id) {
System.out.println("testRequestParam " + id);
return "success";
}
@SessionAttributes
@SessionAttributes即將值放到session作用域中,寫在class上面。
@SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外(value 屬性值),
還可以通過模型屬性的對象類型指定哪些模型屬性需要放到會話中(types 屬性值),
用例:@SessionAttributes(value = {"user"}, types = {String.class})
@ResponseBody
作用: 該注解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式后,寫入到Response對象的body數據區。
使用時機:返回的數據不是html標簽的頁面,而是其他某種格式的數據時(如json、xml等)
Springboot常用注解:
@SpringBootApplication:
包含@Configuration、@EnableAutoConfigeration、@ComponentScan
通常用在主類上
@Repository:
用於標注數據訪問組件,既DAO組件
@Service
用於標注業務層組件
@RestController:
包含@Controller、@ResponseBody
用於標注控制層組件
@ResponseBody:
表示該方法返回的結果直接寫入Http Response body中,不會被解析為跳轉路徑
@Component:
泛指組件,當組件不好歸類時使用
@ComponentScan:
組件掃描,相當於<context:component-scan>,如果掃描到有@Component、@Controller、@Service等這些
注解的類,則把這些類祖冊為bean
@Configuration:
指出該類是Bean配置的信息源,相當於XML中的<beans></beans>,一般加在主類上
@Bean:
相當於XML中的<bean></bean>,放在方法上,意思是生產一個Bean,並交由spring管理
@EnableAutoConfiguration:
讓Springboot根據應用所聲明的依賴來對spring框架進行自動配置,一般加在主類上
@AutoWired:
byType方法。把配置好的Bean拿來用,完成屬性、方法的組裝,自動裝配,當加上(required=false)時,
即便找不到這個Bean也不報錯
@Qualifier:
當有多個同一類型的Bean時,可以用@Qualifier("name")來指定,與@Autowired配合使用
@Resource(name="name",type="type"):
沒有括號的話,默認ByName,與@Autowired類似
@Profiles
spring Profiles提供了一種隔離應用程序配置的方式,並讓這些配置只能在特定的環境下生效
任何@Component或@Configuraion都能被@Profile標記,從而限制加載它的時機
@ConfigurationProerties
SpringBoot加載校驗外部的配置
@ControllerAdvice
包含@Component,可以被掃描,用於統一處理異常
@ExceptionHandler(Exception.class):
用於方法上表示遇到這個異常就執行這個方法,與@ControllerAdvice 配合使用