1

我们手头有以下问题。我们需要自动装配这个服务:

@Service       
public class myService implements ServiceInterface {}

我们希望能够访问自动装配的 myService 类的所有方法,而不仅仅是在 ServiceInterface 中声明的方法。问题是我们似乎必须通过使用限定符/资源注释来自动连接这个服务,但是使用

@Autowired
@Qualifier("myService")
ServiceInterface noGoodService; 

我们无法访问 myService 的所有方法。我们怎样才能做到这一点?

4

1 回答 1

0

如果这是您使用的实际代码,并且您没有在配置中声明的事务或任何其他 AOP 内容,那么注入实际服务应该完全没问题。然而,一般来说,Spring 会根据一些配置创建代理,比如事务、安全等。

默认情况下,spring 会创建一个基于接口的 JDK 动态代理。一个类是动态创建的,它实现了服务的所有接口(那些不错的 myService$proxy1 类)。此类不是的实例,myService而是ServiceInterface动态对象的实例,因此不能将动态对象强制转换为该类型。

要么在接口上定义你需要的方法(这不是接口的全部目的,否则接口就没什么用了)或者使用基于类的代理,这需要类路径上的 CGLib。

于 2013-09-17T07:17:35.713 回答