我正在编写一个在Web层中使用Springboot / Java 8并在工作层中运行Java Application的应用程序。工作人员从消息队列中读取。我有两个层次使用的共同服务单例。我想使用javax.inject.Provider模式将本地原型bean注入公共服务实例,而不是将它们传递给所有服务方法。所以我想弄清楚如何最好地创建javax.inject.Provider<ServiceContextInfo>
。
我在配置文件中尝试了这个:
@Configuration
public class MyConfiguration {
@Bean
ReportInfo ReportInfo() {
return new ReportInfo();
}
@Bean(name = "serviceContextInfo")
public ServiceContextInfo serviceProviderInfoBean() {
ServiceContextInfo info = new ServiceContextInfo();
info.setReportInfo(reportInfo());
return info;
}
@Bean
public ProviderCreatingFactoryBean providerCreatingFactoryBean() {
ServiceContextInfo info = new ServiceContextInfo();
info.setReportInfo(reportInfo());
ProviderCreatingFactoryBean providerFactory = new ProviderCreatingFactoryBean();
providerFactory.setTargetBeanName("serviceContextInfo");
return providerFactory;
}
然后在工作人员的消息接收器中,这称为:
ProviderCreatingFactoryBean providerFactoryBean =
applicationContext.getBean(ProviderCreatingFactoryBean.class);
Provider<Object> serviceContextInfo = providerFactoryBean.getObject();
((ServiceContextInfo)serviceContextInfo.get()).
setDynamicData(webToWorkerMessage.getDynamicData());
这是abstractService类:
public class AbstractService {
@Inject
protected Provider<ServiceContextInfo> contextInfo;
}
这是ServiceContextInfo类:
@Data
@Scope("prototype")
@Component
public class ServiceContextInfo {
private ReportInfo reportInfo;
private String dynamicData;
}
我觉得我走在正确的轨道上;但我只是没有使用XML,Java配置和如何最好地支持动态数据要求的简单示例之间的相关性...在消息监听器中对工厂bean的调用似乎不会出现工作。另外,我不想分配给Provider<Object>
,而是分配给Provider<ServiceContextInfo>
。
在Web层,我还将构建ServiceContextInfo对象,以便服务类对两个层执行相同的操作。
非常感谢协助! 提前谢谢......
答案 0 :(得分:0)
毕竟我能够让它发挥作用。仍然必须处理工作层中的Provider<Object>
问题。 Web层根据需要注入它。其余的工作很好。这并不像我想象的那么困难......