在@Enable...Repository
注释中指定repositoryBaseClass
和repositoryFactoryBeanClass
。就像这样:
@EnableMongoRepositories(
repositoryBaseClass = MyBaseClass.class,
repositoryFactoryBeanClass = MyRepositoryFactoryBean.class)
在这种RepositoryFactoryBean
类,你可以正常使用依赖注入,因为它是一个Spring bean,因此,举例来说,你可以通过构造注入的SomeBean
一个实例,如图所示如下:
public class MyRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> extends MongoRepositoryFactoryBean<T,S,ID>{
private final SomeBean bean;
public MyRepositoryFactoryBean(Class repositoryInterface, SomeBean bean) {
super(repositoryInterface);
this.bean = bean;
}
}
你RepositoryFactoryBean
现在通过覆盖 'getFactoryInstance' 创建自定义RepositoryFactory
的一个实例。
@Override
protected RepositoryFactorySupport getFactoryInstance(MongoOperations operations) {
return new MyMongoRepositoryFactory(operations, bean);
}
虽然这样做,它可以传递要注入的bean。上例中的bean
。
而这个工厂终于实例化你的仓库基类。也许最好的办法是委托一切现有的工厂类,只是增加了依赖注入进来:
public class MyMongoRepositoryFactory extends MongoRepositoryFactory {
private final SomeBean bean;
MyMongoRepositoryFactory(MongoOperations mongoOperations, SomeBean bean) {
super(mongoOperations);
this.bean = bean;
}
@Override
protected Object getTargetRepository(RepositoryInformation information) {
Object targetRepository = super.getTargetRepository(information);
if (targetRepository instanceof MyBaseClass) {
((MyBaseClass) targetRepository).setSomeBean(bean);
}
return targetRepository;
}
}
有一个complete working example on Github。