Spring Aop揭秘(一)
前言:在日常开发中,spring aop用得很多,可以用作日志,权限,事物的横切;在此小弟的一番理解,如果有不对的地方,还
望各路大神多指教
1.spring aop 术语
连接点(Joinpoint):执行的特定的位置(可理解为方法执行)
切入点(Pointcut) : 连接点的一个集合(一般用expression表示)
通知(Advice) : 需要增强的功能(例如日志管理,事物管理)
切面(Aspect) :切入点和通知的组合
2.spring aop 实现依赖
我们都知道在spring的配置文件中配置aop代码,代码如下
<bean id="XXXXSupport" class="com.********.XXXXSupport"/>
<aop:config>
<aop:aspect ref="XXXXSupport">
<aop:pointcut id="aggSupportMethod"
expression="@annotation(com.********.AggCache)"/>
<aop:around pointcut-ref="XXXXSupport" method="doSupport"/>
</aop:aspect>
</aop:config>
但是spring不是管理bean的吗,spring又是如何解析这些配置呢?这就用到spring自定标签的作用,且慢慢道来!
spring 自定义标签使用流程
1.下载spring源码后,全局搜索spring-aop-version.xsd文件(versiond 代表spring版本号),部分代码如下
2.spring aop自定义标签的入口是AopNamespaceHandler类,继承NamespaceHandlerSupport类,顶层基类是NamespaceHandler,如果大家对spring自定义标签不了解,可以去百度了解这方面的知识;spring已经默认已经实现了这些代码
3.接下里我们需要将AopNamespaceHandler配置在spring.handlers里面,spring已经帮我做了
4.还需要把spring-aop-version.xsd文件添加到spring.schemas中,在spring解析xml的时候,会解析这个文件;还需要在spring的配置文件中需要引入schema
5.但是定义了这些 spring是怎么找到AopNamespaceHandler呢? spring容器启动时,会解析配置文件,会解析自定义的元素
然后开始调用init方法进行初始化,
6.接着调用NamespaceHandler的prase方法进行标签解析
7.最后解析完标签内容组装成BeanDefinition,注入spring容器中