问题描述
为了提高我的服务的可配置性,我实现了一种逻辑,以获取要在运行时注册的,在我的配置中定义的bean,例如:
READ_BIT
在应用程序启动时,引导程序组件读取配置并根据其在配置中的定义实例化Bean:
receivers:
myResource:
sourceExchange: MyExchange
entity: "com.company.domain.MyEntity"
writer: "com.company.writer.MyEntityDBWriter"
这很好用,并允许可配置的Bean注册,而不会丢失自动配置/自动装配支持。
由于这些bean中采用的逻辑是DB-Writing-Logic,因此我想通过使用 @Component
@Slf4j
public class ReceiverBootstrapper {
private ReceiversConfigurationModel configuration;
private ConfigurableApplicationContext context;
private Environment environment;
public ReceiverBootstrapper(ReceiversConfigurationModel receiversConfigurationModel,ConfigurableApplicationContext context,Environment environment) {
this.configuration = receiversConfigurationModel;
this.context = context;
this.environment = environment;
}
@postconstruct
public void bootstrapReceivers() throws ClassNotFoundException,illegalaccessexception,InstantiationException {
Map<String,ReceiverConfigurationModel> receiverMap = this.configuration.getReceivers();
for (String receiverName : receiverMap.keySet()) {
ReceiverConfigurationModel receiverConfigurationModel = this.configuration.getReceivers().get(receiverName);
Class writerClass = Class.forName(receiverConfigurationModel.getWriter());
AbstractDocumentWriter writer = (AbstractDocumentWriter) writerClass.newInstance();
context.getbeanfactory().registerSingleton(receiverName + "Writer",writer);
context.getbeanfactory().autowireBean(writer);
writer.postconstruct();
...
}
}
进行自动事务管理来扩展此概念,但是我想我将不得不告诉某些Manager遵守实例化和注册的手册上的这些注释。豆。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)