我想用一些参数构建@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”,有人可以解释如何?
答案 0 :(得分:0)
所以似乎正在发生的事情是component-scan
正在找到你的@Repository
类并且正在尝试用它创建一个bean,它不能,因为它不知道如何实例化您的班级使用typeParameterClass
参数。
修复可能是其中的一部分:
可能不是一个好方法可以继续去除
无论如何生成bean都会@Repository
注释
通过@Bean
注释。这不是一个好选择的原因是
因为在运行时修改了@Repository
带注释的bean行为
。例如,将持久性异常转换为spring运行时类型。
另一个选项可能是保留@Repository
注释但是
防止针对此特定类或特定类的组件扫描
封装