Spring-Aopgit
最近在整理一些资料,发现写博客真是一件挺好的记忆方式。慢慢的总结,不过在看你们博客的时候发现博客中虽然都配上了例子,可是我的以为没有直接给源码那么简单,因此若是是我亲手实践的,源码都能在个人gitHub上找到。github
gitHub地址:git@github.com:xiaotiao/spring.gitspring
关于Aop的一些概念:数据库
Aop就是面向切面编程,切面编程的大体意思就是在咱们的软件系统中存在不少与逻辑业务不相关的但却也很重要的部分,因为不与逻辑业务相关,直接写在业务里不合适,你们想一想咱们最初写JDBC程序的时候多痛苦呀,要写一大推不相关的代码。这也是spring声明式事务的方便之处。编程
AOP术语:spa
这个也是挺绕的,我说说本身的理解吧,也不知道对不对。代理
切面(Aspect)定义了全部逻辑业务中必须的额外处理,固然切面这可能会有多个,说严谨些就是切面集合定义了全部逻辑业务中必须的额外处理。日志
切面的好处显而易见,方便维护,将全部与逻辑业务无关的汇聚一块儿,多好。对象
通知(Advice),在要执行逻辑业务代码的时候,通知就在切点(pointcut)处将切面的功能织入到逻辑业务中。blog
假若有代码:
public void test(){//这儿要执行一些额外的必要操做,如打印日志,数据库 事务等等
.....
}
切点检查到此处要执行通知,因而在此处将切面的一个或多个通知织入进来,(注意,可能不是所有通知)
因此通知就是定义了一个切面功能,以及什么时候执行这些操做,就是执行顺序。
在Spring中,有五种不一样的通知:
Before
After
After-throwing
After-return
Around
其中around能够共享状态信息哦.
切点(pointcut)就是指定业务逻辑代码在何处要执行通知(Advice)
织入代码:spring Aop是经过运行时动态生成代理对象来完成代码织入的。
具体能够参考代码