设为首页 加入收藏

TOP

Spring中的AOP
2014-11-24 14:49:06 来源: 作者: 【 】 浏览:35
Tags:Spring AOP

AOP,面向切面编程


在不改动代码的前提下,灵活的在现有代码的执行顺序前后,添加进新规机能。


来一个简单的Sample:


目标类:


advice:只以Around advice为例


编织切入关系的配置文件:


Sample的启动:


以上代码,用customerServiceProxy代理CustomerService的执行


在customerServiceProxy的配置中,定义了用hijackAroundMethodBean作为方法拦截器,在hijackAroundMethodBean中利用invoke方法,拦截住所有的方法调用,塞入自己的逻辑业务。


上面看到的是Spring的Sample。


其实,Spring的AOP也是调用了其他开源技术实现。


比较常用的是JDK自己的Proxy,和开源的CGLIB


两者的区别,Proxy需要Advice必须从接口继承过来。如果切入的目标物是实体类,则无法使用。


CGLIB则可以用于直接覆盖实体类的方法。


Spring对以上两种都有支持。


Spring在配置文件中,通过ProxyFactoryBean编织和实现了切面的构成。


我们在执行以下这行话的时候


CustomerService cust = (CustomerService) appContext


.getBean("customerServiceProxy");



其实是将动态对象的生成委托给了ProxyFactoryBean


当配置文件中 的class属性配置的实现类是FactoryBean时,通过getBean方法返回的不是FactoryBean本身,而是 FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean()方 法。



执行顺序如下:


1. ProxyFactoryBean中的getObject


2. ProxyFactoryBean中的initializeAdvisorChain


从配置文件中的advice list中取得interceptorNames,并将其加入advisorChain


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Spring中MVC框架的底层实现 下一篇C# 动态可视排序算法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: