Spring对AOP的支持和限制

目前AOP的三个主要实现为
AspectJ(http://eclipse.org/aspectj)
JBoss AOP(http://labs.jboss.com/portal/jbossaop/index.html
Spring AOP(http://www.springframework.org)
惭愧,目前还只是初步了解Spring AOP,对另外两个完全无知 :oops:
希望后面可以找点时间了结下AspectJ(祈祷老婆不要总是透支我的时间在商场或去商场的路上 :cry: )

Spring AOP是采用运行时织入的,是基于代理实现的。因此SpringAOP就局限于方法织入,如果需要构造器或属性织入,Spring AOP暂时还无能为力。但不能于在Spring应用中没有办法,这时可以利用Spring中结合AspectJ的方式,让AspectJ来为Spring生成需要的bean实例

Spring AOP利用proxy来包裹aspect,把它们织入到spring管理的bean里面。在运行时,proxy bean会截取客户对target bean的调用,先执行aspect逻辑,再把调用转发到真正的target bean

Spring生成proxy bean的方式有两种:
(1)如果target bean是一个接口的实现,Spring会用java.lang.reflect.Proxy来动态的生成一个新类来实现接口,织入通知,并且把调用转发到target bean
(2)如果target bean不是一个接口,Spring会用CGLIP库生成目标类的一个子类,在子类中织入通知,但是被标记为final的方法是不能被织入通知的

很明显,第二种方式主要是为了解决遗留代码或没有接口的第三方类的。从设计上说,显然是面向接口的第一种方式耦合度更小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值