实现接口的Spring自动装配服务

时间:2013-09-17 07:10:34

标签: spring service interface autowired

我们手头有以下问题。我们需要自动提供这项服务:

@Service       
public class myService implements ServiceInterface {}

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

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

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

1 个答案:

答案 0 :(得分:0)

如果这是您使用的实际代码,并且您没有像配置中声明的事务或任何其他AOP内容,那么通过注入实际服务应该完全没问题。但是一般情况下,Spring会根据某些配置创建代理,例如事务,安全性等。

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

在接口上定义所需的方法(接口的全部目的不是它,否则接口是无用的)或使用基于类的代理,这将需要类路径上的CGLib。