Java 如何在Spring Hibernate 5 LocalSessionFactoryBean中注入Spring管理的CacheRegionFactory 问题

Java 如何在Spring Hibernate 5 LocalSessionFactoryBean中注入Spring管理的CacheRegionFactory 问题,java,spring,hibernate,hazelcast,spring-orm,Java,Spring,Hibernate,Hazelcast,Spring Orm,Spring ORM Hibernate 4附带的LocalSessionFactoryBean允许通过CacheRegionFactory属性的标准依赖项注入注入CacheRegionFactory 现在对于Spring ORM Hibernate 5附带的LocalSessionFactoryBean,已经没有这样的属性了 当需要对缓存配置进行更精细的控制时,能够注入区域工厂非常方便,特别是在使用Spring将Hibernate配置为二级缓存时 我的用例是根据我的应用程序配置文件动态指定

Spring ORM Hibernate 4附带的LocalSessionFactoryBean允许通过CacheRegionFactory属性的标准依赖项注入注入CacheRegionFactory

现在对于Spring ORM Hibernate 5附带的LocalSessionFactoryBean,已经没有这样的属性了

当需要对缓存配置进行更精细的控制时,能够注入区域工厂非常方便,特别是在使用Spring将Hibernate配置为二级缓存时

我的用例是根据我的应用程序配置文件动态指定TCP/IP Hazelcast集群的成员。Hazelcast用作二级缓存

问题: 如何通过Spring依赖项注入将Spring管理的缓存区域工厂注入Hibernate 5 LocalSessionFactoryBean?还欢迎对不同方法提出建议

细节
Hibernate版本:5.1.0,Spring/Spring ORM版本:4.2.5,Hazelcast版本:3.6.4

使用
Hibernate.cache.region.factory\u类属性。用法示例:



此处的更多信息:

您可以创建自己的会话工厂bean,从
LocalSessionFactoryBean
扩展并重写方法
buildSessionFactory
,通过
ServiceRegistryBuilder
为Hibernate提供自己的区域工厂:

class MySessionFactoryBean extends LocalSessionFactoryBean { 
  private final RegionFactory regionFactory;

  MySessionFactoryBean(RegionFactory regionFactory) {
    this.regionFactory = regionFactory;
  }  

  @Override
  protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {

    StandardServiceRegistryBuilder serviceRegistryBuilder = sfb.getStandardServiceRegistryBuilder();
    serviceRegistryBuilder.addService(RegionFactory.class, regionFactory);

    return sfb.buildSessionFactory();
  }

此功能最近已恢复,修复程序将在Spring Framework 5.1 RC1中提供

Spring框架JIRA的问题链接:

Arthur的答案是可行的,但还有一个略短的变体:

public class MyLocalSessionFactoryBean extends LocalSessionFactoryBean {

    private RegionFactory regionFactory;

    @Required
    public void setRegionFactory(RegionFactory regionFactory) {
        this.regionFactory = regionFactory;
    }

    @Override
    protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {
        sfb.getProperties().put(AvailableSettings.CACHE_REGION_FACTORY, regionFactory);
        return sfb.buildSessionFactory();
    }
}

当然,谢谢,我知道这一点。我需要注入一个Spring管理的自定义区域工厂类/bean,在这里我可以利用我的其他Spring管理组件。我已经更新了我的问题,以澄清这一点。有什么解决办法吗?