2017-07-04 61 views
0

我有自己的自定义Spring Data公共存储库,以便为所有Spring Data存储库提供通用行为。我需要的是在创建存储库时修改EntityManager。但是我不能将Spring bean注入到JpaRepositoryFactoryBean中,因为这个bean是通过new运算符创建的。如何将Spring bean注入JpaRepositoryFactoryBean

public class BasicJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> extends JpaRepositoryFactoryBean<T, S, ID> { 

@Autowired 
private SomeService service; // - it does not work 

    @Override 
    protected RepositoryFactorySupport createRepositoryFactory(EntityManager em) { 
    // do some logic here 
    service.doSmth(); 
    return new CommonRepositoryFactory<>(em); 
    } 

    private static class CommonRepositoryFactory<T, I extends Serializable> extends JpaRepositoryFactory { 

    private final EntityManager em; 

    public CommonRepositoryFactory(EntityManager em) { 
     super(em); 
     this.em = em; 
    } 

    @SuppressWarnings("unchecked") 
    protected Object getTargetRepository(RepositoryMetadata metadata) { 
     JpaEntityInformation entityInformation = getEntityInformation(metadata.getDomainType()); 
     return new CommonRepositoryImpl(entityInformation, em); 
    } 

    protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) { 
     return CommonRepositoryImpl.class; 
    } 
    } 

} 
+0

你正在使用什么弹簧版本? – ledniov

+0

..为什么通过'new'创建'JpaRepositoryFactoryBean'? (是不可避免的?) – xerx593

+0

其实我使用的是Spring Boot 1.4,所以Spring的版本是4.3.2 – idmitriev

回答

0

在该类中实现一个setter或从该类延伸的setter。

+0

如何设置一个bean进入这个工厂? ?它失控了。 – idmitriev

+0

扩展此课程,并在扩展中包含一个setter – Andres