spring-aop功能 涉及到的东西很多 比如 切面 CGLIB 责任链等 这些东西会讲到 但不会详细讲解 一来是因为篇幅限制 另外博客的目的还是授人以鱼不如授人以渔
为了让大家能阅读下面几篇关于aop
的文章更顺利些 这里先给读者讲一下 spring
实现aop
大概的流程以及涉及到的一些名词 因为注解形式的友好性 大家用的比较多 所以我们只谈这种形式的实现
aop
面向切面编程(AOP) :面向对象编程(OOP)的一种扩展 可以这样理解 我们之前所做的所有功能大体来说都是线性的(好比在流淌在水管里的水 一直是往前流动的 很难纵向扩展) 如果我们想加一些公共的服务 比如说日志 登录检查等 OOP将会有大量的重复代码
pointcut
连接点 就是这些
额外的动作
的发生点 (在什么地方)
advice
切面 就是我们上面说的那些公共服务 比如说日志 登录检查等 (做什么)
advisor
我们这里说的
advisor
是实现代码里面的advisor
是一个封装类 包括了pointcut(验证是否跟指定方法匹配的功能) 与 advice
流程:
我们暂时把spring加载bean的过程笼统的分为两个阶段
spring
加载配置文件并根据配置文件或者注解生成BeanDefinition
的过程。BeanDefinition
看这个词的意思就略知一二 如果你看过tomcat
的源码的话 应该会让你想起servletconfig
主要是用来保存bean
的配置信息spring
提前加载非懒惰bean
很显然 aop
的实现就是在第二个阶段 bean
有几个比较特殊的阶段 比如实例化(instantiate
) 初始化(initiate
) 那么就可以在这几个特殊阶段的前后加一些方法 实现扩展 这些扩展点也就是我们属性的BPP的由来了