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