繁体   English   中英

如何在Spring中对@repository使用构造函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM