好久沒有更新胁孙,今天來講一下在公司看到的技術(shù)
如何利用springAOP思想唠倦,在執(zhí)行某個(gè)方法之后執(zhí)行其他的操作
什么是spring aop思想
首先說一下,我在這里是不會(huì)深入講解spring aop的設(shè)計(jì)思想的涮较,就幾句話帶過了
如果想了解spring AOP的思想稠鼻,請(qǐng)移步到<a >springAOP 設(shè)計(jì)模式</a>
springAOP核心是動(dòng)態(tài)代理,原理網(wǎng)上有狂票,我太懶了不想回頭看了候齿,就說一下我知道的給大家聽一下,如果有錯(cuò)誤闺属,歡迎大家指正
1.SpringAOP抽取公共代碼塊
SpringAOP的設(shè)計(jì)思想其實(shí)跟 最初學(xué)習(xí)編程的時(shí)候慌盯,剛開始學(xué)習(xí) ‘工具類’,‘接口’時(shí)接觸到的想法類似掂器,
工具類 --> 共用的亚皂,高效的(一處編碼,多處受益)
接口 --> 模板国瓮,規(guī)范(規(guī)定要做什么)
工具類-->我們將一些重復(fù)使用的灭必,多處地方調(diào)用的代碼塊抽取出來,放到一個(gè)方法里面
當(dāng)我們用到這些代碼的時(shí)候乃摹,就調(diào)用該方法禁漓,不必重復(fù)造輪子
2.springAOP---切西瓜
比如說,一本書孵睬,書里面有書頁播歼,有書簽對(duì)吧。
那如果我這樣子比喻掰读,Java-->??荚恶,書頁-->方法撩穿,springAOP-->書簽
看出什么了?
1.每頁上面是不是都可以插入書簽
2.書簽是不是可以在每頁插入多個(gè)
3.一頁是不是可以被兩個(gè)書簽插入
學(xué)springAOP 就要會(huì)切入點(diǎn)谒撼,切入時(shí)機(jī)食寡,切入后的處理---->自行百度
@SpringAOP 自動(dòng)執(zhí)行指定方法簡(jiǎn)例 --> 賬戶注冊(cè)之后自動(dòng)輸出 helloWorld
像我這么懶的人,還在加班廓潜,所以例子也是公司的演變過來了
//controller 入口
@RestController
@RequestMapping("/ticket")
public class TicketController {
@Resource
private ITicketService ticketService;
@RequestMapping(method = RequestMethod.POST)
public Message<Ticket> createTicket(String fromUserId, Ticket ticket, int action) {
return ticketService.createTicket(fromUserId, ticket, action);
}
}
@Component
@Aspect
@org.springframework.core.annotation.Order(1)
public class TicketAspect {
@Resource
private ITicketService ticketService;
@Pointcut("execution (* cn.umiit.epb.service.impl.UserService.create(..))")
public void registryAspect() {
}
@AfterReturning(pointcut = "registryAspect()", returning = "message")
public void afterRegistry(JoinPoint joinPoint, Message<User> message) {
System.out.println("helloWorld");
}
公司喜歡用標(biāo)簽抵皱,不用代碼的形式,如果想知道代碼怎么實(shí)現(xiàn)下面標(biāo)簽的功能可以去百度
@Resource 跟 @@Autowired類似辩蛋,有區(qū)別 交給spring創(chuàng)建bean對(duì)象的
@RestController MVC 思想 ,controller層入口標(biāo)簽
@RequestMapping("/ticket") url地址
@org.springframework.core.annotation.Order(1) 創(chuàng)建 bean 順序
@Aspect 切面
@component (把普通pojo實(shí)例化到spring容器中呻畸,相當(dāng)于配置文件中的<bean id="" class=""/>)
``