繁体   English   中英

在原型bean中注入依赖项

[英]Injecting dependencies in a prototype bean

我在Spring 3中使用Lookup方法注入将原型bean注入到Singleton bean中,如Spring文档此处所述 在我的原型bean中,我对我的applicationContext.xml中声明的另一个bean具有@Autowired依赖关系。 查找方法注入似乎可以正常工作,因为我的原型bean已注入到我的单例bean中,但是原型的依赖项根本没有注入。 通过查找方法返回原型时,可以按正常方式将依赖项注入到原型bean中吗? 如果没有,执行此操作的首选方法是什么?

编辑 :Bean定义如下:

<bean id="jobRouter" class="com.ccn.JobRouter">
   <lookup-method name="createJobConsumer" bean="jobConsumer"/>
</bean>

<bean id="jobConsumer" class="com.ccn.JobConsumer" scope="prototype"/>

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
   <property name="corePoolSize" value="5" />
   <property name="maxPoolSize" value="100" />
   <property name="WaitForTasksToCompleteOnShutdown" value="true" />
</bean>

工作路由器

public abstract class JobRouter {

   private LinkedHashMap<String, JobConsumer> jobRoutingMap = new LinkedHashMap<String, JobConsumer>();

   public void add(Job Job) {
      if(!jobRoutingMap.containsKey(job.getObjectKey())){
             jobRoutingMap.put(job.getObjectKey(), createJobConsumer());
      }
      //Hand off job to consumer
      JobConsumer jobConsumer = jobRoutingMap.get(job.getObjectKey());
      jobConsumer.add(job);
   }

   protected abstract JobConsumer createJobConsumer();
}

工作消费者

public class JobConsumer {

   @Autowired private TaskExecutor taskExecutor;

   private LinkedBlockingQueue<Job> jobQueue = new LinkedBlockingQueue<Job>();  

   public JobConsumer() {
      taskExecutor.execute(new JobQueueMonitor());
   }

   public boolean add(Job job) {
      if(!jobQueue.contains(job)){
         return jobQueue.add(job);
      }
      return true;
   }

   private class JobQueueMonitor implements Runnable{
      @Override 
      public void run() {
         ...
      }
   }
}

我发现原型bean内部的依赖关系实际上已被正确注入。 问题是在注入依赖项之前,我试图访问构造函数内部的依赖项(请参见上面的代码中的JobConsumer构造函数),并且显然为null。 我将代码从JobConsumer构造函数移到了@PostConstruct注释方法中,并且按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM