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);
//查詢部門(mén)記錄數(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)換為指定格式后凭语,寫(xiě)入到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彬犯,可以不寫(xiě);
required
:默認(rèn)值為true谐区,可以不寫(xiě);
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)用