Spring4包含了对泛型类型解析的主要增强,但当包含bean类的type参数被参数化时,我无法自动生成泛型类型。
我需要跟踪提交给外部服务的作业的状态,并且我想在每个作业启动时为其创建一个条目,并在收到回发时清除或更新它。我通常会尝试将持久性策略与服务接口分开,因此我有一个接口JobStatus
,一个Spring数据Mongo类MongoJobStatus实现了JobStatus
。由于作业可能会在外部服务有机会为其分配ID(例如HTTP 502)之前失败,因此我需要将jobstatus
传递回服务以标识更新:
interface JobStatusService<S extends JobStatus> {
S beginJob(...);
S updateJobStatus(S targetJob, Status newStatus);
void finishJob(S targetJob);
}
因此,处理触发作业和记录回发的Spring控制器如下所示;controller类携带了一个类型参数,以便我可以存储新的status对象并将其传递回服务:
@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上下文失败,对于JobStatusService
,NosuchBeanDefinitionException
。我已经确认,如果设置required=false
,MongoJobStatusService
bean将正确地进行组件扫描并安装在上下文中,但Spring似乎无法理解类实现了参数化的泛型接口。
有没有办法向Spring指定我需要一个bean来实现一个泛型接口,该接口带有一个在包含bean级别参数化的类型参数,而不是在字段级别嵌入一个文字类型参数?
尝试添加:
@Autowired
@Qualifier("mongoJobStatusService")
JobStatusService<JS> jobService;
并指定mongojobstatusservice
bean的名称。
如何为动态创建的函数声明泛型类型? 我如何在中使用并传递? < code>useFoo的预期用法
问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问
问题内容: 我有一个笼子课: 我试图在另一个类main方法中实例化Cage对象: 我收到错误:笼子是原始类型。泛型Cage的引用应参数化。我尝试了几个想法,但对这种棘手的语法感到困惑:o( 问题答案: 是通用类型,因此您需要指定一个类型参数,例如这样(假设有一个): 您可以使用任何扩展的类型(甚至是自身)。 如果省略type参数,那么在这种情况下最终得到的是。但是,即使这是您想要的,您仍应明确声明
如果我使用MySQL,我的实体和枚举将成功创建。 我将数据库更改为PostgreSQL-9.4。因此,我有以下错误: ...原因:org.hibernate.tool.schema.spi.SchemaManagementException:无法对JDBC目标执行架构管理[创建表角色(id int8 not null,name enum('ADMIN','USER','SEARCH')not nu
我在父类和子类中都有构建器。父对象有一个抽象生成器和一个扩展抽象生成器的具体生成器。子级有一个扩展父级抽象生成器的抽象生成器和一个扩展子级抽象生成器的具体生成器。原因是父级的setter返回当前的Builder类。我有一些方法返回类自己的抽象构建器类型,我想将其称为父抽象类型(调用它的父方法)。我所能做的就是
我在Spring3.2.1中测试了类似的scenarion。解决此问题的最佳方法是什么? 这个问题是在09年3月10日报告的。 为什么在Spring中仍然没有实现这个功能?是否有任何并发症妨碍解决这一不足?