我在同事的盒子上遇到了一个奇怪的错误。CGLib 正在为 Spring AOP 日志记录自动代理服务类,并且在运行时它通过 cglib 代理类在 fastclass 上显示“未解决的编译错误:必须覆盖超类方法”。
在有问题的类中,我在实现接口时使用了@override 注释,并且我知道它在 jdk 1.6 中受支持,但在 1.5 中不受支持。CGLib 正在自动代理该实现类。
但是,它在我的带有 jdk_1.6_17 的盒子上运行良好,但在他的带有 jdk_1.6_10 的盒子上却不行。
但是,他可以使用使用相同 jdk 的 maven 正确编译项目。删除 @Override 注释修复了运行时 cglib 错误,但这很奇怪吧?
cglib 使用什么编译器进行自动代理,这可能是 jdk_1.6_10 中的错误还是我还缺少其他东西?
使用弹簧 3.0.4、jboss 5.10、弹簧安全 3.0.3
基本上,该类在spring-security中实现了AuthenticationUserDetailsService。
有问题的方法签名:
@Override
public UserDetails loadUserDetails(Authentication auth) throws UsernameNotFoundException;
UserDetails 是一个 spring-security 接口,Authentication 也是。