使用Spring代理来实现AOP时,业务类一定要用到接口吗,我没有接口,直接是类难道不行?





// ... 暂时没有





com.tipf.project.service.UserService这个是个类,而不是接口
启动服务器报错
UserService is not an interface

请问如何解决

,其作用是,强制要求Spring使用 cglib的方式生成代理对象


这行可以去掉就行了

必须是接口,因为JDK要求这样的,

可以看下这个文档,就明白SPRING要接口了
http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/index.html
JAVA动态代理机制

美中不足
诚然,Proxy 已经设计得非常优美,但是还是有一点点小小的遗憾之处,那就是它始终无法摆脱仅支持 interface 代理的桎梏,因为它的设计注定了这个遗憾。回想一下那些动态生成的代理类的继承关系图,它们已经注定有一个共同的父类叫 Proxy。Java 的继承机制注定了这些动态代理类们无法实现对 class 的动态代理,原因是多继承在 Java 中本质上就行不通。
有很多条理由,人们可以否定对 class 代理的必要性,但是同样有一些理由,相信支持 class 动态代理会更美好。接口和类的划分,本就不是很明显,只是到了 Java 中才变得如此的细化。如果只从方法的声明及是否被定义来考量,有一种两者的混合体,它的名字叫抽象类。实现对抽象类的动态代理,相信也有其内在的价值。此外,还有一些历史遗留的类,它们将因为没有实现任何接口而从此与动态代理永世无缘。如此种种,不得不说是一个小小的遗憾。
但是,不完美并不等于不伟大,伟大是一种本质,Java 动态代理就是佐例。

spring 的bean就是使用了动态代理机制