我最初尝试自动装配以下类和依赖项:
@RestController ControllerA(ControllerProxy<A>)
,@RestController ControllerB(ControllerProxy<B>)
@Component ControllerProxy<T>(Converter<T, TTarget>, ProxiedController)
@Component ProxiedController()
@Component AConverter implements Converter<A, TTarget>
,@Component BConverter implements Converter<B, TTarget>
Spring抱怨,也许很明显,它不能创建ControllerProxy
,因为它期望一个bean但找到了2。对我来说,很明显,只有一个类型可以满足,因为每个{ {1}}用于Converter
和A
情况,但是显然,这不是Spring和/或Java所看到的。从https://stackoverflow.com/a/50987156/173225我了解到,我某种程度上需要提供每个B
的实例,并且它可能与Java实现泛型中的类型擦除有关,尽管答案表明Spring可以通过某种方式获取围绕一些。我已经设法通过显式注册Converter
实例来使一切正常工作:
ControllerProxy
但是我宁愿避免这项工作,特别是当我希望其他人能够轻松创建新类型的@Bean
ControllerProxy<A> getAProxy(Controller controller) {
return new ControllerProxy<A>(new AConverter(), controller);
}
@Bean
ControllerProxy<B> getBProxy(Controller controller) {
return new ControllerProxy<B>(new BConverter(), controller);
}
和A
而不必为配置烦恼时。在实际的实现中,B
是一个websocket端点,Controller
是一个帮助程序类,该类允许任何人调用ControllerProxy
方法以标准格式将消息发布给订阅者。理想情况下,支持一条新消息所需要做的唯一一件事是:
send
理想情况下,所有这些操作都可以在单个ControllerProxy<NewMessageType>
中完成,可以将其放入bin文件夹中,并在启动时自动发现并配置。
是否可以在没有手动配置的情况下自动发现并连接正确的bean?