如何创建javax.inject.Provider <myobject>使用Spring

时间:2017-05-23 21:12:58

标签: spring-boot dependency-injection spring-social-facebook

我正在编写一个在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对象,以便服务类对两个层执行相同的操作。

非常感谢协助! 提前谢谢......

1 个答案:

答案 0 :(得分:0)

毕竟我能够让它发挥作用。仍然必须处理工作层中的Provider<Object>问题。 Web层根据需要注入它。其余的工作很好。这并不像我想象的那么困难......