首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Bean扩展

Spring Bean扩展
EN

Stack Overflow用户
提问于 2012-05-18 14:36:24
回答 1查看 460关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-05-18 20:17:24

有几种可能性。

  • 您可以使用PropertyPlaceHolderConfigurer将实体列表外部化到属性文件。(可以在属性文件中使用SPEL )。
  • 您可以使用抽象PropertySource.

定义,并将其用作其他sessionFactory bean中的父级,然后可以基于Enviroment bean导入这些bean

请注意,Hibernate SessionFactory在构建之后是不可变的,并且SessionFactoryBeanafterPropertiesSet方法中构建SessionFactory,因此设置您想要的SessionFactoryBean的工作必须由某个BeanFactoryPostProcessor完成

编辑

读完您的评论后,我认为您可以声明一个EntityClassHolder bean,并使用Autowire集合工具来获取EntityClassFactoryBean中的所有实体,您可以将这些实体注入到单个SessionFactoryBean中。但我不确定这是不是你想做的:

代码语言:javascript
复制
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;
    }
}

现在,如果您有几个applicatonContext-xxx.xml,那么当您加载其中一个时,将使用在EntityClassHolder beans中定义的实体类来配置SessionFactory

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10647830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档