Spring Aspect的误区

原来在研究spring security的过程中,研究AOP编程。毕竟ACL权限其实就是使用了一堆Aop而已。编写软件框架的时候一直在回避interface + XXXXImpl的模式,另一方面开始使用Spring Annonatiion将interface都省略了。今天使用@ASPECT时候发现怎么都不行,测试了半天发现AOP代理可以是JDK动态代理或者CGLIB代理。其中JDK一定要interface否则你无法切入。因为Spring缺省使用J2SE 动态代理(dynamic proxies)来作为AOP的代理。这样任何接口都可以被代理。而Spring也支持使用CGLIB代理. 对于需要代理类而不是代理接口的时候CGLIB代理是很有必要的。 如果一个业务对象并没有实现一个接口,默认就会使用CGLIB。 作为面向接口编程的最佳实践,业务对象通常都会实现一个或多个接口。但也有可能会 强制使用CGLIB, 在这种情况(希望不常有)下,你可能需要通知一个没有在接口中声明的方法,或者需要传入一个代理对象给方法作为具体类型。 今后还要进行面向接口编程。今天苦头吃了不小。

你可能感兴趣的:(spring,AOP,jdk,编程,J2SE)