代码之家  ›  专栏  ›  技术社区  ›  Thomas Einwaller

在grails中配置LocalSessionFactoryBean的属性

  •  0
  • Thomas Einwaller  · 技术社区  · 14 年前

    我的grails项目 一个 春季项目 类型定义 LocalSessionFactoryBean -但是在grails项目中如何做到这一点呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Burt Beckwith    14 年前

    LocalSessionFactoryBean的Grails版本是一个子类,org.codehaus.groovy.Grails.orm.hibernate.ConfigurableLocalSessionFactoryBean。它在org.codehaus.groovy.grails.plugins.orm.hibernate.HibernatePluginSupport中注册为SpringBean

    sessionFactory(ConfigurableLocalSessionFactoryBean) {
       ...
    }
    

    所以你有几个选择。一个是在resources.groovy中重新定义bean,维护Grails配置的内容和您的更改,即。

    sessionFactory(MyCustomConfigurableLocalSessionFactoryBean) {
       ...
       typeDefinitions = ...
    }
    

    或者,如果可能,可以引用bean并在引导中修改它:

    class BootStrap {
    
       def sessionFactory
    
       def init = { servletContext ->
          sessionFactory.foo = bar
       }
    
       def destroy = {}
    }
    

    在factory bean构建SessionFactory时,typeDefinitions似乎需要提前配置,因此选项1可能是您的最佳选择。

        2
  •  1
  •   Andre Steingress    14 年前

    另一种选择是使用spring的生命周期回调,例如实现beanpstprocessor

    public class CustomBeanPostProcessor implements BeanPostProcessor {
    
    // simply return the instantiated bean as-is
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean; // we could potentially return any object reference here...
    }
    
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if ("sessionFactory".equals(beanName) && bean instanceof ConfigurableLocalSessionFactoryBean)  {
            ConfigurableLocalSessionFactoryBean sessionFactory = (ConfigurableLocalSessionFactoryBean) bean;
            sessionFactory.setTypeDefinitions(...);
        }
        return bean;
    }
    

    }

    把它扔给你的资源

    customProcessor(CustomBeanPostProcessor)