Springbean扩展

Springbean扩展,spring,spring-mvc,hibernate-mapping,Spring,Spring Mvc,Hibernate Mapping,我有一个SpringMVC项目,其中包含一个通用的应用程序上下文xml文件。该文件定义了我的应用程序的一般配置,例如i18n的基本属性文件和连接到数据库的数据源等。在定义这个上下文文件的同时,我还想定义会话工厂,它将具有基本配置,例如要使用的数据源、二级缓存(eh-cache)等等。但这不会包含我的应用程序将加载的实体bean列表。我只想将实体bean的映射保存在单独的文件中,并根据需要加载它们 是否有可能扩展我在基本文件中定义的会话工厂,只添加额外的实体bean?我最终将有几个spring配置

我有一个SpringMVC项目,其中包含一个通用的应用程序上下文xml文件。该文件定义了我的应用程序的一般配置,例如i18n的基本属性文件和连接到数据库的数据源等。在定义这个上下文文件的同时,我还想定义会话工厂,它将具有基本配置,例如要使用的数据源、二级缓存(eh-cache)等等。但这不会包含我的应用程序将加载的实体bean列表。我只想将实体bean的映射保存在单独的文件中,并根据需要加载它们


是否有可能扩展我在基本文件中定义的会话工厂,只添加额外的实体bean?我最终将有几个spring配置文件,这些文件将加载一组单独的实体。这能实现吗?

有几种可能性

  • 可以使用
    PropertyPlaceHolderConfigure
    将实体列表外部化为属性文件。(可以在属性文件中使用SPEL)

  • 您可以使用抽象bean定义并将其用作其他sessionFactory bean中的父项,然后可以基于
    环境导入它们

请注意,Hibernate
SessionFactory
在构建之后是不可变的,而
SessionFactoryBean
build
SessionFactory
afterPropertiesSet
方法中是不可变的,因此必须由一些
BeanFactoryPostProcessor

编辑

在阅读了您的评论之后,我认为您可以声明一个
EntityClassHolder
bean,并使用Autowire collections工具获取
EntityClassFactoryBean
中的所有实体,您可以将这些实体注入一个
SessionFactoryBean
。但我不确定你是否想这么做:

public class EntityClassHolder {

  List<Class<?>> entityClasses;

  public List<Class<?>> getEntityClasses() {
    return entityClasses;
  }

  public void setEntityClasses(List<Class<?>> entityClasses) {
    this.entityClasses = entityClasses;
  }
}



  public class EntityClassFactoryBean extends AbstractFactoryBean<List<Class<?>>> {

    @Autowired
    List<EntityClassHolder> list; 

    @Override
    public Class<?> getObjectType() {
        return List.class;
    }

    @Override
    protected List<Class<?>> createInstance() throws Exception {
        ArrayList<Class<?>> classList = new ArrayList<Class<?>>();
        for (EntityClassHolder ech : list) {
            classList.addAll(ech.getEntityClasses());
        }

        return classList;
    }
}
公共类EntityClassHolder{
列表>GetEntityClass(){
返回实体类;
}

公共void setEntityClass(列表)感谢Jose提供的输入。我能够通过父bean扩展机制实现SessionFactory扩展。但是,这会创建多个会话工厂。我可以使用同一个SessionFactory以及如何仅添加其他实体bean引用吗?我不确定多个会话工厂是否会导致问题。我的想法是ad是一个单一的会话工厂,通过配置来选择它们中的哪一个。但是jose,我有几个独立的模块需要动态加载。要加载的模块本身是一个运行时配置。我需要减少创建的会话工厂的总数,这样系统的整体性能就不会下降o、 有没有可能将我链接到一些关于如何参考Hibernate Bean包含实现PropertySource的示例?我找不到任何示例