如何在spring mvc中重新加载/重新创建sessionFactory bean而不刷新整个webapplication上下文?

时间:2014-07-08 12:20:55

标签: java spring hibernate spring-mvc

在使用hibernate集成的spring中,我有以下要求。 我需要重新加载/重新创建/刷新/更新唯一的sessionFactory bean。

但是在使用

((ConfigurableApplicationContext)ApplicationContextProvider.getApplicationContext()).refresh();

重新加载整个应用程序上下文(所有bean)。

请问任何人可以帮我根据某些条件重新加载一个单一的bean(比如用户选择/点击UI级别的某个选项)

谢谢..

2 个答案:

答案 0 :(得分:1)

这不是一个直接的答案,但我认为在应用程序上下文中重新加载新的SessionFactory而不重新加载使用它的其他bean 将导致严重的问题。 SessionFactory通常是一个单独的bean,因此仅在上下文刷新时使用它注入其他bean。因此,即使您设法在应用程序上下文中放置一个新的SessionFactory bean,DAO也不会知道更改,甚至可以尝试使用已关闭的工厂......

如果你真的想刷新SessionFactory bean,你必须:

  • 关闭旧豆
  • 创建一个新的
  • 小心地将它注入所有 bean(通常是DAO),使用它来模仿刷新时弹簧的作用
  • 以及所有应该是" atomic"在没有请求的意义上,应该对待所有bean都准备就绪。

这是你的应用程序,但所有看起来都容易出错。至少一定要让维护者的红色闪烁评论......

答案 1 :(得分:0)

伙计。试试〜

DefaultListableBeanFactory defaultListableBeanFactory =(DefaultListableBeanFactory) xmlWebApplicationContext.getBeanFactory();
        BeanDefinition beanDefinition = defaultListableBeanFactory.getBeanDefinition("pooledConnectionFactory");
        beanDefinition.setBeanClassName(PooledConnectionFactory.class.getName());
        defaultListableBeanFactory.registerBeanDefinition( "pooledConnectionFactory", beanDefinition);