我對一個非常基本的場景有一些麻煩:我有一個java web應用程序(spring 3),我想將一些對象存儲到堆棧中。然後我想用一個調度器來管理堆棧中的對象,所以我實現了一個石英工作。乾淨利落。我使用@Autowired註解在第一個服務類和作業類中注入堆棧。對於服務類,表已成功注入,但對於作業類,表爲空。 下面的代碼:如果應用於兩個線程之間共享的bean,@Autowired不起作用
類分享
package it.unifi.det.telemat.vr.data;
@Component
public class IndexedNodesStack extends HashMap<IndexedObject, Boolean>{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public synchronized int size() {
// TODO Auto-generated method stub
return super.size();
}
//all the HashMap methods are implemented in a synchronized wrapper method
}
第一類(@Autowired是成功的)
package it.unifi.det.telemat.vr.service;
@Service
public class InnerNodeManager extends ConcreteNodeManager{
@Autowired
private IndexedNodesStack indexedNodesStack; //<--- it is actually autowired!
private void manageIndexedNodes(Boolean isPut, String lri, String features)
{
IndexedObject indexedObject = new IndexedObject();
indexedObject.setId(lri);
if(features != null && isPut)
indexedObject.generateFeatures(features);
indexedNodesStack.put(indexedObject, isPut);
}
}
作業類(@Autowired失敗)
package it.unifi.det.telemat.vr.service.scheduler;
@Component
public class QuartzJSearchJob extends QuartzJobBean{
@Autowired
private IndexedNodesStack indexedNodesStack; //<--- this variable is null :-(
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException
{
//do work
}
}
編輯:這裏是servlet.xml
<context:component-scan base-package="it.unifi.det.telemat.vr" />
<bean name="searchJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="it.unifi.det.telemat.vr.service.scheduler.QuartzJSearchJob" />
</bean>
<bean id="searchJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="searchJob" />
<property name="cronExpression" value="0/50 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="searchJobTrigger" />
</list>
</property>
</bean>
也許我缺乏一些線程間資源共享的知識,因爲這是我在這個領域的第一次嘗試。 我錯過了什麼?
你需要展示你如何創建對象來解釋爲什麼它不會在春天被正確初始化。它是如何初始化的? – ianpojman
這個工作是通過@Component註釋創建的(我編輯了我的問題來糾正它) – MaVVamaldo