`
wsckw5
  • 浏览: 27597 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Spring的findBean和sessionBind

阅读更多
现在的项目是Jsf+Hibernate+Spring+Birt(报表)构成的.但由于Birt没有纳入Jsf的管理因而当遇到Hibernate的延迟加载时会报session关闭错误.解决方法是(自己的理解,说的不定对):

//findBean是Spring提供的方法,通过Name获得配置文件的Bean.由于Spring在项目初始化时就已经注入好,因而拿来使用即可
public Object findBean(String beanname, ServletContext context) {
       ApplicationContext appctx = WebApplicationContextUtils
              .getRequiredWebApplicationContext(context);
       return appctx.getBean(beanname);
    }


//sessinBindThread:这是问题解决的关键由于没纳入Jsf管理,Spring是不会自动在请求时生成Session并绑定其上的,而以下就是手动绑定Session.

public void sessionBindThread(ServletContext context) throws Exception {
       SessionFactory factory = (SessionFactory) findBean(
              "FactoryName", context);
       Session sInfo = SessionFactoryUtils.getSession(factory, true);    
       if(TransactionSynchronizationManager.getResource(factory) == null){
           TransactionSynchronizationManager
               .bindResource(factory,new SessionHolder(sInfo));
       }
    }


//请求之后要解绑!!

public void sessionOutThread(ServletContext context) throws Exception {
       SessionFactory factory = (SessionFactory) findBean(
              "FactoryName", context);
       SessionHolder holderInfo = (SessionHolder) TransactionSynchronizationManager
              .getResource(factory);
       if(holderInfo!=null){
           Session s = holderInfo.getSession();
           s.flush();//不想提交用s.clear()
           TransactionSynchronizationManager.unbindResource(factory);
           SessionFactoryUtils.releaseSession(s, factory);
       }
    }

备注:这里的ServletContext是接口,它对web容器来说定义了servlet环境对象(看字面意思是servelet上下文).对Jsf来说拿到它的方法为

ServletContext context = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();

在读到Hibernate文档时说过SessionFactory创建代价很高,session相对较小,不过这个findBean是返回已有对象,而且由于Spring对项目来说,他的创建都追寻单例模式,对于sessionfactory应该不耗资源

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    spring 获取bean

    spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean

    Spring定义bean的三种方式和自动注入

    在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    Spring的Bean配置

    在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式,以及不同类型的IOC容器。 **Spring的Bean配置**: 在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配...

    Spring Bean创建初始化流程.docx

    在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

    Spring 的bean的作用域总结

    Spring 的bean的作用域总结,详细的总结了 Spring 的bean的作用域

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    线程中获取spring 注解bean

    在Spring框架中,注解是实现依赖注入(Dependency Injection,DI)的重要手段,极大地简化了代码的编写和管理。线程中的操作往往涉及到多线程环境下的资源共享和管理,因此,如何在线程中正确地获取并使用Spring通过...

    spring创建bean简单示例

    本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)原理,这两个概念是Spring框架的核心。 **控制反转(IoC...

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

    SPRING:bean配置properties

    在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    解决这个问题的关键在于深入理解Spring的Bean生命周期和配置机制,检查配置文件、注解使用、依赖关系等,确保每个Bean的定义都是唯一的,且作用域设置正确。同时,对源码进行调试也是一个有效的排查手段,可以追踪到...

    spring中的bean

    2. **注解驱动的Bean定义**:随着Spring的发展,更多地使用注解来进行Bean的定义和配置,如`@Component`、`@Service`、`@Repository`和`@Controller`等。这些注解表明类是一个Spring Bean,同时可以配合`@Autowired`...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    spring-bean 依赖的cglib jar包

    spring-bean 源码依赖的jar包,用于spring源码部署的时候使用

    spring运行过程中动态注册bean

    在Spring框架中,动态注册Bean是一项非常实用的功能,它允许我们在应用运行时向Spring容器添加新的...通过上述机制,我们可以在Spring应用运行时灵活地增加或修改Bean的定义,极大地增强了Spring框架的灵活性和扩展性。

    spring动态向容器中添加bean和删除指定bean.md

    spring动态向容器中添加bean和删除指定bean,不需要重启应用

    Java中Spring获取bean方法小结

    总结,Spring框架通过BeanFactory和ApplicationContext提供了灵活的方式来管理和获取Bean。开发者可以根据应用需求选择合适的方式,从XML配置到注解注入,再到基于Java的配置,Spring都提供了全面的支持。理解这些...

Global site tag (gtag.js) - Google Analytics