Spring对AOP的支持跟限制
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,对另外两个完全无知
希望后面可以找点时间了结下AspectJ(祈祷老婆不要总是透支我的时间在商场或去商场的路上
)
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的方法是不能被织入通知的
很明显,第二种方式主要是为了解决遗留代码或没有接口的第三方类的。从设计上说,显然是面向接口的第一种方式耦合度更小
目前AOP的三个主要实现为
AspectJ(http://eclipse.org/aspectj)
JBoss AOP(http://labs.jboss.com/portal/jbossaop/index.html
Spring AOP(http://www.springframework.org)
惭愧,目前还只是初步了解Spring AOP,对另外两个完全无知
希望后面可以找点时间了结下AspectJ(祈祷老婆不要总是透支我的时间在商场或去商场的路上
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的方法是不能被织入通知的
很明显,第二种方式主要是为了解决遗留代码或没有接口的第三方类的。从设计上说,显然是面向接口的第一种方式耦合度更小