【发布时间】:2010-11-17 14:52:46
【问题描述】:
我在同事的邮箱中遇到了一个奇怪的错误。 CGLib 正在为 Spring AOP 日志记录自动代理服务类,并且在运行时它通过 cglib 代理类在 fastclass 上显示“未解决的编译错误:必须覆盖超类方法”。
在有问题的类中,我在实现接口时使用了@override 注释,并且我知道它在 jdk 1.6 中受支持,但在 1.5 中不受支持。 CGLib 正在自动代理该实现类。
但是,它在我的带有 jdk_1.6_17 的盒子上运行良好,但在他的带有 jdk_1.6_10 的盒子上却不行。
但是,他可以使用 maven 正确编译项目,maven 使用相同的 jdk。 移除 @Override 注解修复了运行时 cglib 错误,但这很奇怪吧?
cglib 使用什么编译器进行自动代理,这可能是 jdk_1.6_10 中的错误还是我还缺少其他东西?
使用 spring 3.0.4、jboss 5.10、spring security 3.0.3
基本上,该类在spring-security中实现了AuthenticationUserDetailsService。
有问题的方法签名:
@Override
public UserDetails loadUserDetails(Authentication auth) throws UsernameNotFoundException;
UserDetails 是一个 spring-security 接口,Authentication 也是。
【问题讨论】:
-
你能展示一些导致问题的方法的源代码吗?此方法是使用泛型还是声明为返回被覆盖方法返回类型(协方差)的子类型?
-
添加了它,不是那样的,它实际上是返回 UserDetails 的自定义实现,但它被声明为返回 UserDetails。
标签: java spring jakarta-ee aop cglib