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