彈簧4包含重大改進,泛型類型的分辨率,但我有與自動裝配一個泛型類型的麻煩當類型參數是對含有bean類參數。彈簧自動裝配參數化泛型類型
我需要跟蹤提交給外部服務的作業的狀態,並且我希望在每個作業啓動時創建一個條目,並在收到回發時清除或更新它。我通常試圖保持我的持久性策略與服務接口分開,所以我有一個接口JobStatus
和一個Spring Data Mongo類MongoJobStatus implements JobStatus
。由於外部服務都有機會分配一個ID(例如HTTP 502)前參加工作可能會失敗,我需要通過JobStatus
回到服務識別更新:
interface JobStatusService<S extends JobStatus> {
S beginJob(...);
S updateJobStatus(S targetJob, Status newStatus);
void finishJob(S targetJob);
}
因此,我處理射擊工作和記錄回發的Spring控制器看起來像這樣;控制器類帶有一個類型參數,這樣我可以存儲新的狀態對象,並將其傳遞迴服務:
@Controller
public class JobController<JS extends JobStatus> {
@Autowired JobStatusService<JS> jobService;
... handler method ...
JS status = jobService.createJob(info, goes, here);
// submit job via HTTP
jobService.updateJobStatus(status, Status.PROCESSING);
...
}
我的MongoDB支持的實現看起來是這樣的:
public class MongoJobStatusService implements JobStatusService<MongoJobStatus> {
MongoJobStatus beginJob(...) {...}
MongoJobStatus updateJobStatus(MongoJobStatus job, Status newStatus) {...}
}
當我嘗試要啓動,Spring上下文將以NoSuchBeanDefinitionException
爲JobStatusService
失敗。我已經證實,如果我設置required=false
,MongoJobStatusService
bean已正確組件掃描並安裝在上下文中,但Spring似乎無法理解該類實現了該參數化的通用接口。
有什麼辦法來指定春天,我需要實現與在含有豆級參數,而不是嵌入式的現場級文字類型參數類型參數的通用接口豆?
也許你'MongoJobStatusService '必須實現'JobStatusService',而不是'JobStatus'? –
@ArtemBilan減法中的錯字。謝謝你的收穫。 – chrylis