弹簧4包括重大改进,泛型类型的分辨率,但我有与自动装配泛型类型麻烦时,类型参数是对含有bean类参数。
我需要跟踪提交给外部服务作业的状态,我希望它启动时创建的每个作业的条目并清除或更新它,当我收到的回传。 我一般尽量保持我从服务接口分离的持久性策略,所以我有一个接口JobStatus
和弹簧数据蒙戈类MongoJobStatus implements JobStatus
。 由于外部服务都有机会分配一个ID前的作业可能会失败(例如HTTP 502),我需要通过JobStatus
回到服务识别更新:
interface JobStatusService<S extends JobStatus> {
S beginJob(...);
S updateJobStatus(S targetJob, Status newStatus);
void finishJob(S targetJob);
}
因此,用于处理发射过的作业和记录回传我的春节控制器看起来像这样; 控制器类中携带的类型参数,这样我可以存储新的状态对象,并将其传递回服务:
@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是正确的组件扫描和安装的背景下,但春天似乎并不能够理解这个类实现了参数化的通用接口。
有什么办法可以指定到春天,我需要实现与在含有豆级参数,而不是嵌入式的现场级文字类型参数类型参数的通用接口豆?