[英]How to use constructors to the @repository in Spring?
我想用一些参数构造@repository:
@Repository
public class BasicRepository<T> {
@Autowired
MongoTemplate mongoTemplate;
private final Class typeParameterClass;
public BasicRepository(Class typeParameterClass){
this.typeParameterClass = typeParameterClass;
}
public void createCollection(T t) {
if (!mongoTemplate.collectionExists(typeParameterClass)) {
mongoTemplate.createCollection(typeParameterClass);
}
}
}
在Java配置中:
@Configuration
public class SpringConfiguration {
@Bean
public BasicRepository<Topic> topicDao(){
return new BasicRepository<Topic>(Topic.class);
}
}
当我运行代码时,它引发了有关“错误创建名称为'basicRepository'的bean的错误”的异常,我认为“ @Repository”的注释没有构造函数,我想初始化“ typeParameterClass”,有人可以解释如何?
因此,似乎正在发生的事情是, component-scan
正在找到您的@Repository
类,并尝试从中创建一个bean,这是不可能的,因为它将不知道如何使用typeParameterClass
参数实例化您的类。
解决方法可能是其中一些:
可能不是一个好方法可以继续和删除@Repository
注解,你无论如何都会产生通过bean @Bean
注解。 这不是一个好的选择的原因是因为@Repository
注释的bean行为是在运行时修改的。 例如,将持久性异常转换为Spring运行时类型。
另一种选择是保留@Repository
批注,但阻止对该特定类或特定程序包进行组件扫描。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.