我们手头有以下问题。我们需要自动提供这项服务:
@Service
public class myService implements ServiceInterface {}
我们希望能够访问自动装配的myService类的所有方法,而不仅仅是ServiceInterface中声明的方法。问题是我们似乎必须使用限定符/资源注释来自动装配此服务,但使用
@Autowired
@Qualifier("myService")
ServiceInterface noGoodService;
我们无法访问myService的所有方法。我们怎样才能做到这一点?
答案 0 :(得分:0)
如果这是您使用的实际代码,并且您没有像配置中声明的事务或任何其他AOP内容,那么通过注入实际服务应该完全没问题。但是一般情况下,Spring会根据某些配置创建代理,例如事务,安全性等。
默认情况下,spring将创建一个JDK动态代理,它基于接口。动态创建一个类,它实现了服务的所有接口(那些不错的myService $ proxy1类)。此类不是myService
的实例,而是ServiceInterface
的实例,因此动态对象无法转换为该类型。
在接口上定义所需的方法(接口的全部目的不是它,否则接口是无用的)或使用基于类的代理,这将需要类路径上的CGLib。