title: SSM注解
categories: 注解
tags: 注解
SSM注解詳細介紹
@Controller
通過@Controller注解說明該類非普通類,而是一個控制器類,這一個注解一般使用在SpringMvc層
@RequestMapping
是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。用于方法上表示請求的方法是該地址的子路徑。
@RequestMapping注解有六個屬性,分成三類進行說明:
-
value,method;
value: 指定請求的實際地址,指定的地址可以是URI Template 模式;
method: 指定請求的method類型, GET、POST、PUT、DELETE等;
-
consumes,produces
consumes: 指定處理請求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;
produces: 指定返回的內(nèi)容類型,僅當request請求頭中的)類型中包含該指定類型才返回;
-
params,headers
params: 指定request中必須包含某些參數(shù)值是,才讓該方法處理。
params 只是判斷url 或者 form data 中的參數(shù)是否復合params的定義,并不會直接綁定數(shù)據(jù)到方法的參數(shù)中!
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。
@Controller
@RequestMapping("/dept")
public class DeptHandler {
@Autowired
IDeptService deptService;
@RequestMapping("/findDept.do")
public String findDept(@RequestParam(defaultValue = "1") int pageIndex, String name, Model model){
PageModel pageModel = new PageModel();
pageModel.setPageIndex(pageIndex);
List<Dept> depts = deptService.findDept(name,pageModel);
//查詢部門記錄數(shù)
int recordCount = deptService.findDeptCount(name);
pageModel.setRocordCount(recordCount);
model.addAttribute("pageModel",pageModel);
model.addAttribute("depts",depts);
model.addAttribute("name",name);
for (Dept d:depts){
System.out.println(d);
}
return "/jsp/dept/dept.jsp";
}
@Resource和@Autowired
@Autowired顧名思義,就是自動裝配。其作用是為了消除代碼Java代碼里面的getter/setter與bean屬性中的property。當然,getter看個人需求,如果私有屬性需要對外提供的話,應當予以保留。@Autowired默認按類型匹配的方式,在容器查找匹配的Bean,當有且僅有一個匹配的Bean時,Spring將其注入@Autowired標注的變量中。
@Autowired默認按照byType方式進行bean匹配,@Resource默認按照byName方式進行bean匹配@Autowired是Spring的注解,@Resource是J2EE的注解。在SSM框架的Service層使用@Autowired注解自動導入Dao包容易爆紅,雖然代碼可以運行但是使用@Resourse就不會出現(xiàn)報錯的現(xiàn)象
@Service
@Service用于標注業(yè)務層組件
@Service
public class DeptServiceImpl implements IDeptService {
@Resource //自動注入 但不會報錯
IDeptDao deptDao;
@ResponseBody
作用: 該注解用于將Controller的方法返回的對象,通過適當?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫入到Response對象的body數(shù)據(jù)區(qū)。
使用時機:返回的數(shù)據(jù)不是html標簽的頁面,而是其他某種格式的數(shù)據(jù)時(如json、xml等)使用;
@RequestMapping("/addDept.do")
@ResponseBody
public Object addDept(Dept dept){
int rows = deptService.addDept(dept);
if(rows > 0){
int recordCount = deptService.findDeptCount(null);
PageModel pageModel = new PageModel();
pageModel.setRocordCount(recordCount);
int totalSize = pageModel.getTotalSize();
System.out.println(totalSize);
return totalSize;
}else{
return "FAIL";
}
}
@RestController
這個注解是@RequestBody和@Controller的合體,作用也是兩個注解的合并。
1)如果只是使用@RestController注解Controller,則Controller中的方法無法返回jsp頁面,配置的視圖解析器InternalResourceViewResolver不起作用,返回的內(nèi)容就是Return 里的內(nèi)容。
例如:本來應該到success.jsp頁面的,則其顯示success.
- 如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定義mediaType內(nèi)容到頁面,則需要在對應的方法上加上@ResponseBody注解。
@Param
不使用@Param注解時,參數(shù)只能有一個,并且是Javabean。在SQL語句里可以引用JavaBean的屬性,而且只能引用JavaBean的屬性
一般在Dao接口傳遞兩個或三個較少的參數(shù)時可以使用@Param注解,如果涉及的參數(shù)較多,可以把所有參數(shù)進行Map封裝,然后傳遞Map就可以了
@RequestParam
在springMVC中使用RequestParam注解映射請求參數(shù),@RequestParam有三個屬性,分別如下:
(1)value請求參數(shù)的參數(shù)名,作為參數(shù)映射名稱;
(2)required,默認為true(必填),當設(shè)置成必填時,如果沒有傳入?yún)?shù),報錯;
(3)defaultValue設(shè)置請求參數(shù)的默認值;
@requestParam主要用于在SpringMVC后臺控制層獲取參數(shù),類似一種是request.getParameter("name"),它有三個常用參數(shù):defaultValue = "0", required = false, value = "isApp";defaultValue 表示設(shè)置默認值,required 銅過boolean設(shè)置是否是必須要傳入的參數(shù),value 值表示接受的傳入的參數(shù)類型。
value:參數(shù)key,可以不寫;
required:默認值為true,可以不寫;
Spring其它常用注解匯總
使用注解之前要開啟自動掃描功能,其中base-package為需要掃描的包(含子包)。
@Configuration把一個類作為一個IoC容器,它的某個方法頭上如果注冊了@Bean,就會作為這個Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延遲初始化
@Service用于標注業(yè)務層組件、
@Controller用于標注控制層組件(如struts中的action)
@Repository用于標注數(shù)據(jù)訪問組件,即DAO組件。
@Component泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。
@Scope用于指定scope作用域的(用在類上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定銷毀方法(用在方法上)
@DependsOn:定義Bean初始化及銷毀時的順序
@Primary:自動裝配時當出現(xiàn)多個Bean候選者時,被注解為@Primary的Bean將作為首選者,否則將拋出異常
@Autowired 默認按類型裝配,如果我們想使用按名稱裝配,可以結(jié)合@Qualifier注解一起使用。如下:@Autowired @Qualifier("personDaoBean") 存在多個實例配合使用
@Resource默認按名稱裝配,當找不到與名稱匹配的bean才會按類型裝配。
@PostConstruct 初始化注解
@PreDestroy 摧毀注解 默認 單例 啟動就加載
@Async異步方法調(diào)用