`
Supanccy2013
  • 浏览: 225066 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring创建bean的scope选择

阅读更多
   注:原创作品,转载请注明出处

Spring提供五种选择让用户决定bean的作用范围:
1,Singleton:单例模式,在整个Spring ioc中。使用singleton定义的bean将只有一个实例。
   例如:
   <bean id="userDao" class="com.supan.dao.imp.UserDaoImp" scope="singleton">
       <property name="sessionFactory" ref="sessionFactory"></property>
   </bean> 


    测试java代码:
     public void testSpringScope()
     {
    	 UserDao ud1 = (UserDao)ctx.getBean("userDao");
    	 
    	 UserDao ud2 = (UserDao)ctx.getBean("userDao");
    	 
    	 System.out.println(ud1 == ud2);
     }


     输出:true

2,prototype 原型模式:每次通过spring容器的getBean都将产生一个新的实例
   例如:
   spring配置文件:
    <bean id="userDao" class="com.supan.dao.imp.UserDaoImp" scope="prototype">
       <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 


   java测试代码:
        /**
      * <测试spring配置bean的属性scopt的作用>
      */
     public void testSpringScope()
     {
    	 UserDao ud1 = (UserDao)ctx.getBean("userDao");
    	 
    	 UserDao ud2 = (UserDao)ctx.getBean("userDao");
    	 
    	 System.out.println(ud1 == ud2);
     }


    输出:false

3,request:对于每次http请求,使用request定义的bean都将产生一个新的实例。注:只有在web容器使用spring时,这个作用域才生效。

   <bean id="LoginAction" class="com.supan.LoginAction" scope="request">

4,session:对于每次http session请求,使用session定义的bean都将产生一个新的实例。。注:只有在web应用中使用spring,此作用域才能生效。

   由于本机上没有j2ee环境,没有实例展出。

5,global session:每个全局的Http session对应一个bean实例,典型情况下,仅在使用portletcontext的时候才有效。注:只有在web应用中使用spring,此作用域才能生效。
 
     由于本机上没有j2ee环境,没有实例展出。

 
最后写一点:使用经验:
1,   Sington是单例模式,由ioc容器管理,不是线程安全的。
      若类是无状态的,那么sington性能要高一点,因为只有一个实例。
      若类是有状态的,那么必须把scope设置成prototype。

2,   在ssh2项目中struts的action是有状态的,必须显示设置成scope="prototype",prototype是原型模式,每次action请求过来都会创建一个新的action。
   而对于dao的实现类,推介使用scope = "sington" 因为这些类没有状态,

3,比较常用的是singleton,和prototype两种作用域。
4,spring默认的作用域是singleton(这样最省系统资源),如非必要,请不要随便用prototype作用域(比较消耗系统资源)
5,在使用request,session,global session需要在spring中额外的配置。
  第一种配置方法(Servlet2.4以后):
  <listener>
      <listener-class>
           org.springframework.web.context.request.RequestContextListener
      </listener-class>
  </listener>

   第一种配置方法(Servlet2.4以前):
   <filter>
    <filter-name>requestContextFilter></filter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
   </filter>

    <filter-mapping>
      <filter-name>requestContextFilter</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>


分享到:
评论

相关推荐

    spring bean 的作用域(scope)

    spring bean 的作用域(scope), SPringle bean的作用域

    粗略实现spring创建bean

    "粗略实现spring创建bean"这个主题主要涉及到Spring如何初始化、配置以及管理Java对象,也就是我们所说的Bean。下面我们将深入探讨Spring Bean的生命周期、配置方式以及相关API。 1. Spring Bean 的生命周期 - ...

    详解Spring中bean的scope以后使用

    在Spring框架中,Bean的作用域(scope)是一项非常重要的特性,它决定了Bean实例的生命周期和管理方式。正确理解和运用Bean的作用域对于优化应用程序性能、简化开发流程具有重要意义。本文将详细介绍Spring中不同...

    spring bean的生命周期

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

    创建SpringBean配置工具类

    创建SpringBean配置工具类(安全)如: &lt;bean id=... scope="prototype"&gt;&lt;/bean&gt;

    线程中获取spring 注解bean

    6. **RequestScope**:在Web应用中,如果bean需要在一次HTTP请求的生命周期内保持一致,可以使用`@Scope("request")`。这样,每次请求都会创建新的bean实例,而不会影响其他线程。 理解并熟练掌握这些方法,有助于...

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

    在配置Bean时,可以使用scope参数来指定Bean的作用域。 三、Bean的实现方式 Spring框架提供了多种方式来实现Bean,例如使用XML配置文件、使用Annotation配置等。 1. 使用XML配置文件:可以在XML配置文件中配置...

    spring bean life cycle

    在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...

    spring的bean作用域

    在Spring框架中,Bean的作用域是管理Bean实例创建和存活范围的重要概念。Bean的作用域决定了在特定...选择合适的作用域可以使Bean实例的创建和管理更加高效,避免不必要的资源消耗,同时确保应用程序的行为符合预期。

    尚学堂_Spring_0600_IOC_Bean_Scope

    可以创建一个简单的Spring项目,尝试配置不同Scope的Bean,观察并理解它们在运行时的行为差异。 通过以上讲解,我们已经涵盖了Spring框架中IOC的基本概念以及Bean Scope的相关知识。理解这些内容对于开发和维护基于...

    Spring之scope讲解测试示例代码

    在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...

    Spring Bean 加载顺序 .

    在注册时,Spring会根据@Bean、@Scope等注解确定Bean的作用域。默认情况下,Bean是单例(Singleton),但也可以配置为原型(Prototype)或其他作用域。 4. **Bean的依赖解析**: Spring会分析Bean之间的依赖关系...

    Spring如何使用注解的方式创建bean

    Spring 使用注解方式创建 Bean Spring 框架中提供了多种方式来创建 Bean,使用注解方式创建 Bean 是其中的一种常用方式。下面将详细介绍使用注解方式创建 Bean 的步骤和相关知识点。 使用@Configuration 和@Bean ...

    详解Spring中bean的作用域

    换言之,当把一个 bean 定义设置为 singleton 作用域时,Spring IoC 容器只会创建该 bean 定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该 bean 的后续请求和引用都将返回被...

    Spring中与Bean相关的接口

    默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`AutowireCandidateResolver`和`BeanFactoryAware`接口...

    Spring项目bean基础配置代码

    默认是`singleton`,意味着Spring容器只会创建一个Bean实例并共享给所有请求。 接下来,我们讨论Bean的别名配置。别名允许为同一个Bean定义多个名称,便于在不同的地方引用。在XML配置中,我们可以使用`alias`属性...

    浅谈Spring单例Bean与单例模式的区别

    这种机制是通过Spring的Bean scope机制实现的, scope="singleton"表示该Bean是单例的。 与单例模式不同,Spring单例Bean是与其容器(ApplicationContext)密切相关的。同一个容器中,某个Bean只能创建一个实例,...

    Spring之核心容器bean

    Spring的核心容器是整个框架的基础,它负责创建、配置和管理bean。主要有两个关键组件:BeanFactory和ApplicationContext。BeanFactory是Spring的基础容器,它提供bean的实例化、作用域、依赖注入、生命周期管理等...

    spring自动扫描和管理Bean的示例

    - **@PostConstruct** 和 **@PreDestroy**:标记初始化和销毁方法,Spring会在Bean创建后和销毁前调用这些方法。 在`spring_autozp_demo`压缩包中,可能包含了一个Spring应用的示例代码,演示了如何使用上述注解和...

    Spring Bean生命周期&BeanDefinitions1

    默认情况下,Bean的scope为"singleton",表示Spring容器只创建一个实例,并将其缓存。如果scope设为"prototype",每次请求都会创建一个新的Bean实例。 7. **销毁**:当容器关闭时,如果是"singleton"作用域的Bean,...

Global site tag (gtag.js) - Google Analytics