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

时间:2014-10-18 04:04:46

标签: java 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”,有人可以解释如何?

1 个答案:

答案 0 :(得分:0)

所以似乎正在发生的事情是component-scan正在找到你的@Repository类并且正在尝试用它创建一个bean,它不能,因为它不知道如何实例化您的班级使用typeParameterClass参数。

修复可能是其中的一部分:

  • 可能不是一个好方法可以继续去除 无论如何生成bean都会@Repository注释 通过@Bean注释。这不是一个好选择的原因是 因为在运行时修改了@Repository带注释的bean行为 。例如,将持久性异常转换为spring运行时类型。

  • 另一个选项可能是保留@Repository注释但是 防止针对此特定类或特定类的组件扫描 封装