IOC相關(guān)
首先要在配置文件中啟用注解掃描:
<context:component-scan base-package="com"/>
<context:component-scan />標(biāo)簽負(fù)責(zé)掃描哪些類有注解,base-package為需要掃描的包路徑(含所有子包)。
@Controller:用于標(biāo)注控制器組件
@Service:用于標(biāo)注業(yè)務(wù)層組件
@Repository:用于標(biāo)注數(shù)據(jù)訪問組件
@Component:用于對比較中立的類進(jìn)行注解。與前三個注解等效。
@Resource:用于依賴關(guān)系裝配。默認(rèn)按名稱裝配。名稱可以通過@Resource的name屬性指定。如果沒有指定name屬性,則支持自動裝配。
@Autowired:自動裝配
該注解可以實現(xiàn)對方法形參的自動裝配,查找被標(biāo)注的方法的入?yún)㈩愋偷腂ean,并調(diào)用方法自動注入
有注解的類,會自動注冊為bean,并將bean的名字設(shè)置為該類的類名,但首字母小寫,可以通過添加參數(shù)來指定名稱。例:@Controller("con")
AOP相關(guān)
啟動基于注解的AspectJ支持
<aop:aspectj-autoproxy />
@Aspect:使用@Aspect注解的類,Spring會當(dāng)作切面類處理。
@Before(切入點表達(dá)式):前置通知
@AfterReturning(切入點表達(dá)式):后置通知
@AfterThrowing(pointcut = 連接點,throwing = "e"):異常通知
必須使用@AfterThrowing(pointcut = 連接點,throwing = "e")的形式,否則會出現(xiàn)”error at ::0 formal unbound in pointcutd”錯誤
@After(切入點表達(dá)式):最終通知
@Around(切入點表達(dá)式):環(huán)繞通知
@Pointcut:定義切入點表達(dá)式,需要同時定義一個切入點方法,返回值為void且方法體為空
事務(wù)管理
<!—為事務(wù)管理器注冊注解驅(qū)動器-->
<tx:annotation-driven transaction-manager="txManager"/>
@Transactionald 使用該注解的類會添加事務(wù)
@Transactional(readOnly = true) 對不涉及寫數(shù)據(jù)庫寫入操作的方法,可加入只讀屬性以提高速度
MVC
@RequestMapping("url") 注解請求地址
給處理方法添加RequestMapping注解
對應(yīng)前端請求地址http://localhost:8080/TestApp/login.do
@ResponseBody
Spring4的控制器可以使用response對象做出ajax響應(yīng),并利用@ResponseBody注解自動將數(shù)據(jù)生成json響應(yīng)給瀏覽器。
@ModelAttribute
被@ModelAttribute注釋的方法會在此controller每個方法執(zhí)行前被執(zhí)行, 可以用來攔截請求、控制登錄權(quán)限等
Controller
注解一個類表示控制器,Spring MVC會自動掃描標(biāo)注了這個注解的類。
RequestMapping
請求路徑映射,可以標(biāo)注類,也可以是方法,可以指定請求類型,默認(rèn)不指定為全部接收。
RequestParam
放在參數(shù)前,表示只能接收參數(shù)a=b格式的數(shù)據(jù),即 Content-Type為 application/x-www-form-urlencoded類型的內(nèi)容。
RequestBody
放在參數(shù)前,表示參數(shù)從request body中獲取,而不是從地址欄獲取,所以這肯定是接收一個POST請求的非a=b格式的數(shù)據(jù),即 Content-Type不為 application/x-www-form-urlencoded類型的內(nèi)容。
ResponseBody
放在方法上或者返回類型前,表示此方法返回的數(shù)據(jù)放在response body里面,而不是跳轉(zhuǎn)頁面。一般用于ajax請求,返回json數(shù)據(jù)。
RestController
這個是Controller和ResponseBody的組合注解,表示@Controller標(biāo)識的類里面的所有返回參數(shù)都放在response body里面。
PathVariable
路徑綁定變量,用于綁定restful路徑上的變量。
@RequestHeader
放在方法參數(shù)前,用來獲取request header中的參數(shù)值。
@CookieValue;
放在方法參數(shù)前,用來獲取request header cookie中的參數(shù)值。
GetMapping PostMapping PutMapping.. *Mapping的是Spring4.3加入的新注解,表示特定的請求類型路徑映射,而不需要寫RequestMethod來指定請求類型。
演示
import org.dom4j.util.UserDataElement;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "/get/{no}", method = RequestMethod.GET)
@ResponseBody
public Object get(@PathVariable("no") String no) {
return new UserDataElement("");
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public void save(@RequestBody UserDataElement user) {
}
}