我在Spring 4.0(使用Spring Boot)环境中遇到以下情况:
映射界面:
public interface EntityModelMapper<ENTITY extends AbstractEntity, MODEL extends AbstractModel>{ }
映射实现:
@Component
public class ProductEntityModelMapper implements EntityModelMapper<Product, ProductModel>{ }
服务:
public interface CrudService<MODEL extends AbstractModel>{ }
我想做这样一个抽象的超类服务:
public abstract AbstractCrudService<ENTITY extends AbstractEntity, MODEL extends AbstractModel> implements CrudService<MODEL>{
@Autowired
private EntityModelMapper<ENTITY, MODEL> mapper;
public EntityModelMapper<ENTITY, MODEL> getMapper(){
return mapper;
}
}
所以我可以有如下实现:
@Service
public ProductCrudService extends AbstractCrudService<Product, ProductModel>{
public void someMethod(Product product){
ProductModel model = getMapper().map(product);
}
}
但是Spring告诉我它找不到EntityModelMapper的合格bean来注入服务类。这种情况是可能的,我做错了什么,还是我在挑战Spring依赖注入的极限?
堆栈跟踪:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productCrudService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.flycatcher.seagull.mapper.EntityModelMapper com.flycatcher.seagull.facade.service.crud.AbstractCrudService.mapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.flycatcher.seagull.mapper.EntityModelMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
据此:https://spring.io/blog/2013/12/03/spring-framework-4-0-and-java-generics从Spring 4.0版本开始是可能的。
这对我也没用。(使用4.2.3时出现相同的异常和Im)。因此,请尝试升级到最新版本4.2.6。
如果仍然不起作用,您可以使用@Qualifier注释和autowire EntityModelMapper作为子类中的接口,并将getMapper定义为抽象:
@Component
@Qualifier("productEntityModelQualifier")
public class ProductEntityModelMapper implements EntityModelMapper<Product, ProductModel>{ }
然后在ProductCrudService中:
@Service
public ProductCrudService extends AbstractCrudService<Product, ProductModel>{
@Autowired
@Qualifier("productEntityModelQualifier")
EntityModelMapper<Product, ProductModel> mapper;
@Override
protected EntityModelMapper<Product, ProductModel> getMapper(){return mapper;}
public void someMethod(Product product){
ProductModel model = getMapper().map(product);
}
}
我是Spring的新手,我正在尝试自动连接一个通用DAO。不幸的是,我遇到了一个错误。我试图根据它搜索信息,但大多数解决方案都声明使用@Qualifier注释,我认为这与我想要实现的目标背道而驰。 所以下面的一些代码(我将摆脱类参数,一旦我处理当前问题): 道 服务 和下面抛出的错误:
“关联项”(associted items)是指一系列有关各种变量类型的 item(项) 的规则。它是 trait 泛型的扩展(extension),允许 trait 在内部定义新的项。 关联类型(associated type)就是这种项的其中一个。当 trait 在其容器类型(container type)上是泛型时,关联类型提供了更简单的使用模式。(原文:One such item is c
这个问题是在泛型关联类型在Rust中可用之前提出的,尽管它们是被提出和开发的。 我的理解是,特征泛型和关联类型在它们可以绑定到结构的类型数量上有所不同。 关联类型仅绑定1个类型: 泛型关联类型是这两种类型的混合。它们绑定到一个类型,正好有一个关联的生成器,而生成器又可以关联任何数量的类型。那么前面示例中的和这个泛型关联类型有什么区别呢?
对于一堆带有泛型的包装类,我的继承结构遇到了一些麻烦。这基本上是结构: 这将与当前代码一起编译和工作,但是,这似乎很危险。如果调用方像这样使用这个方法:,它将很好地编译,但是如果findMiddle尝试返回SubBWrapper,则在运行时会有一个ClassCastException。我以为行得通却行不通的是: 所以我的问题基本上是,有没有正确的方法来编写编译、运行并遵循最佳实践的方法findMi
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
问题内容: 我正在尝试创建一个泛型类型的数组。我收到错误消息: 我很困惑。任何线索为什么会这样。 问题答案: 其背后的原因是,您不能创建通用或参数化类型的数组,而只能 创建可验证的 类型(即可以在运行时推断出的类型)。 尽管可以将此类数组类型 声明 为变量或方法参数。这有点不合逻辑,但这就是Java的样子。 Java泛型和集合在第6章中广泛讨论了此问题和相关问题。