我有一个使用基于rabbitmq的RPC的spring应用程序。在客户端,我想生成一个代理对象,该对象根据客户端类路径上可用的带注释的接口委托给RPC。以类似的方式,我希望能够在服务器端注册交换,队列和消费者,基于带注释的具体类。
我的注释是@RpcInterface
和@RpcEndpoint
,我从RpcEndpoint实现的接口创建了一个java代理。
我现在的问题是我希望能够使用这些注释扫描类路径以及基于此的客户端和服务器端的bean添加到应用程序上下文。问题是FactoryBean
只允许实例化单个对象,BeanDefinitionRegistryPostProcessor
要求我添加bean定义,这实际上是不可能的,因为在客户端,我可能只有接口不能被实例化。
现在,我正在为定义接口的每个接口添加@Configuration
类和一个@Bean
方法,所以如果我在接口上添加依赖项,我也会拉在@Configuration
。这感觉就像不必要的代码,如果我可以只返回一堆实例化的bean而不是一个单独的bean。
所以,而不是:
@Bean
public Object createBlahBean() {
createProxyFor(MyInterface.class);
}
我希望能够做到:
@Beans
public List<Object> createBlahBeans() {
List<Object> out = new ArrayList<>();
for(Class c : findAnnotatedInterfacesFromClasspath()) {
out.add(createProxyFor(c));
}
return out;
}
或类似的。任何指针?