好久没有更新,今天来讲一下在公司看到的技术
如何利用springAOP思想,在执行某个方法之后执行其他的操作
什么是spring aop思想
首先说一下,我在这里是不会深入讲解spring aop的设计思想的,就几句话带过了
如果想了解spring AOP的思想,请移步到<a href="http://blog.csdn.net/luanlouis/article/details/51095702">springAOP 设计模式</a>
springAOP核心是动态代理,原理网上有,我太懒了不想回头看了,就说一下我知道的给大家听一下,如果有错误,欢迎大家指正
1.SpringAOP抽取公共代码块
SpringAOP的设计思想其实跟 最初学习编程的时候,刚开始学习 ‘工具类’,‘接口’时接触到的想法类似,
工具类 --> 共用的,高效的(一处编码,多处受益)
接口 --> 模板,规范(规定要做什么)
工具类-->我们将一些重复使用的,多处地方调用的代码块抽取出来,放到一个方法里面
当我们用到这些代码的时候,就调用该方法,不必重复造轮子
2.springAOP---切西瓜
比如说,一本书,书里面有书页,有书签对吧。
那如果我这样子比喻,Java-->📚,书页-->方法,springAOP-->书签
看出什么了?
1.每页上面是不是都可以插入书签
2.书签是不是可以在每页插入多个
3.一页是不是可以被两个书签插入
学springAOP 就要会切入点,切入时机,切入后的处理---->自行百度
@SpringAOP 自动执行指定方法简例 --> 账户注册之后自动输出 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");
}
公司喜欢用标签,不用代码的形式,如果想知道代码怎么实现下面标签的功能可以去百度
@Resource 跟 @@Autowired类似,有区别 交给spring创建bean对象的
@RestController MVC 思想 ,controller层入口标签
@RequestMapping("/ticket") url地址
@org.springframework.core.annotation.Order(1) 创建 bean 顺序
@Aspect 切面
@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
``