AOP,Aspect-oriented Programming,面向切面编程,是你接触Spring之后比较难理解的概念。网上也有很多文章来介绍它,但是我老是看不懂,上来就一堆术语,头大。在我详细解释AOP之前,先用一句话说明他的典型用法:
把对象修改一下或者包装起来,在它方法执行的前后,额外运行点代码
很多时候你不知不觉就使用了AOP:在@Component
类中,你在方法上加了@Transactional
注解之后,方法执行前会开始事务,方法执行之后结束事务,方法发生异常之后回退事务;加上@Async
注解之后,方法最终被调用的时候是异步的;加上@Cacheable
注解之后,方法的返回值会被缓存起来,下次调用的时候直接返回缓存值。这些都是框架提供给你的,你只要加个注解声明一下就能用。
同时你也可以编写AOP代码来实现自己需求,比如在方法执行之前开始计时,在方法结束之后停止计时,来得到方法的运行时间;比如在业务的关键地方加上log;比如权限控制、懒加载等等。使用AOP的特点就是侵入性比较小,你的业务代码不用动,降低耦合度,方便团队分工。
(更多…)