`

spring bean的作用域和生命周期

 
阅读更多

spring bean的作用域和生命周期

 
容纳bean
(1)bean工厂:最简单的容器,提供了基础的依赖注入支持,创建各种类型的bean
(2)应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务
 
 
从ApplicationContext上下文容器中获取bean和从bean工厂容器中获取bean的区别“
 
bean的作用域

Spring Framework支持五种作用域(其中有三种只能用在基于web的)。

singleton

在每个Spring IoC容器中一个bean定义对应一个对象实例。

prototype

一个bean定义对应多个对象实例。

request

在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。

session

在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

global session

在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的SpringApplicationContext情形下有效。

 
  
 
BeanFactory方式(已废弃)
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        UserService userService = (UserService)factory.getBean("userService");
        userService.sayHello();
此种方式实例化该容器时,bean不会被创建(lazy,速度慢,省内存),只有当你去使用bean时才进行加载。
移动设备使用BeanFactory(省内存)。其他九成用ApplicationContext
使用ApplicationContext时,并且为singleton时(prototype不可!),配置的bean不管你用不用,都被实例化(early,好处就是预加载,缺点就是耗内存)
 
 
 
或许bean的方法:
1     ClassPathXmlApplicationContext:从类路径中加载
2     FileSystemXmlApplicationContext: 从文件系统加载
3     XmlWebApplicationContext:从web系统中加载
 
 
 
 
 
bean的生命周期(scope=singleton为例说明)
(1)实例化(当程序加载beans.xml文件时),把我们的bean实例化到内存中,也可用factory-method 来调用有参的构造器
(2)设置属性,前提是有setter才能成功
(3)bean实现BeanNameAware接口,则可以通过setBeanName获取id号
(4)bean实现BeanFactoryAware接口,则可以获取beanFactory
(5)bean实现ApplicationContextAware接口,则调用setApplicationContext
(6)bean如果和一个后置处理器关联,则会调用两个方法,见下面的程序示例,执行”before“
(7)实现InitializingBean接口,则会调用afterPropertiesSet()方法
(8)调用定制(只有所配置的bean有,非aop)的初始化方法,xml bean里面写init-method
(9)后置处理器的”after“
(10)使用bean
(11)容器关闭
(12)bean实现DisposableBean的destroy()方法关闭数据连接,socket,文件流等
(13)调用定制的销毁方法  xml bean里面写 destroy-method
实际开发中用(1)(2)(6)(9)(10)(11)
BeanFactory 的话少了(5)(6)(9)
 
 
 
 MyBeanPostProcessor.java
复制代码
package com.myBeanPostProcessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; /** * Created by balfish on 15-3-29. */

class MyBeanPostProcessor implements BeanPostProcessor { @Override
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("postProcessBeforeInitialization 函数被调用");
   return o;
}
@Override
public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("postProcessAfterInitialization 函数被调用");
   return o;
  } }
复制代码

 

 

 

applicationContext.xml的变化

 <!--配置自己的后置处理器,类似过滤器-->
    <bean id="myBeanPostProcessor"

class="com.myBeanPostProcessor.MyBeanPostProcessor" />

 

 

应用场景举例

1 记录每个对象实例化的时间

2过滤每个调用ip

3给所有对象添加属性,或者函数(面向切面aop)

 

分享到:
评论

相关推荐

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

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

    spring bean的生命周期

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

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析 Spring Framework 是一个流行的 Java Web 应用程序框架,它提供了一个强大的依赖注入机制,称为 Bean 容器。Bean 容器管理着应用程序中的所有对象,并提供了一些...

    浅谈Spring中Bean的作用域、生命周期

    在Spring框架中,Bean的作用域是指Bean实例的生命周期和可见性域。Spring框架中定义了五种作用域,分别是singleton、prototype、request、session和global session。 1. singleton:单例模式,Spring IoC容器中只会...

    spring的bean作用域

    Spring容器仅负责初始化和配置这些实例,但不会管理它们的生命周期。客户端(如其他Bean或代码)需要负责销毁这些实例。 - 配置Prototype Bean的例子是:`&lt;bean id="role" class="spring.chapter2.maryGame.Role" ...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    了解并熟练掌握Bean的生命周期和作用域,有助于优化应用性能,避免资源浪费,并使代码更加灵活和可维护。在实际开发中,根据业务需求选择合适的作用域,并善用生命周期回调方法,可以使Spring更好地服务于我们的应用...

    深入了解Spring中Bean的作用域和生命周期

    在 Spring 中,Bean 的作用域是指 Bean 实例的生命周期和共享程度。Spring 提供了五种作用域:singleton、prototype、request、session 和 globalSession。每种作用域都有其特点和应用场景。 1. Singleton 作用域 ...

    Spring bean生命周期demo

    不同作用域的Bean,其生命周期和管理方式也不同。例如,单例Bean在整个应用中只有一个实例,而原型Bean每次请求都会创建新的实例。 6. **AOP代理** 如果Bean被声明为需要AOP代理(例如,带有切面注解),Spring会...

    详解Spring中bean的作用域

    Spring 中 bean 的作用域是指 Spring IoC 容器中 bean 的生命周期和实例化方式。bean 的作用域决定了 bean 的实例化和生命周期的管理方式。在 Spring 中,bean 的作用域可以分为五种:singleton、prototype、...

    Spring Bean 的生命周期

    - **作用域的影响**:不同作用域(如singleton、prototype、request、session等)的Bean,其生命周期和创建方式都有所不同,需要根据应用场景选择合适的作用域。 - **懒加载**:如果Bean配置为`lazy-init="true"`,...

    Spring的bean生命周期

    总的来说,理解和掌握Spring的Bean生命周期、容器周期和工厂周期对于开发高效且可维护的应用至关重要。通过这些知识,我们可以更有效地配置Bean,管理它们的生命周期,优化性能,并且能够更好地应对复杂的应用场景。

    spring bean life cycle

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

    Spring Bean的作用域.docx

    Spring提供了五种不同的Bean作用域,每种都有其特定的使用场景和行为。 1. **Singleton作用域**:这是Spring的默认作用域,意味着无论何时从容器中请求一个特定的Bean,都会返回同一个实例。在配置文件中,可以使用...

    Spring Bean生命周期&BeanDefinitions1

    6. **作用域处理**:Bean的作用域会影响其生命周期。默认情况下,Bean的scope为"singleton",表示Spring容器只创建一个实例,并将其缓存。如果scope设为"prototype",每次请求都会创建一个新的Bean实例。 7. **销毁...

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

    综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...

    spring-aware接口实现与bean作用域(spring多容器层面)

    这些作用域定义了Bean的生命周期和创建行为: 1. **单例(Singleton)**:默认作用域,每个容器中只有一个实例,适合无状态的服务。 2. **原型(Prototype)**:每次请求都会创建一个新的Bean实例,适用于有状态的...

    Spring实战之Bean的作用域singleton和prototype用法分析

    总结起来,Spring中的`singleton`和`prototype`作用域是管理Bean生命周期的重要手段。`singleton`提供了单例模式的实现,确保了全局唯一性,适合状态不随时间改变的对象;`prototype`则支持按需创建新实例,适用于...

    Spring容器中Bean的作用域编程开发技术共3页.pd

    在Spring框架中,Bean的作用域是其生命周期管理的关键部分,它决定了Bean的创建、共享以及销毁方式。本篇内容将深入探讨Spring容器中Bean的作用域编程开发技术,以帮助开发者更好地理解和利用这些特性来优化应用的...

    简单了解spring bean作用域属性singleton和prototype的区别

    Spring Bean作用域属性singleton和prototype的区别详解 Spring Framework中,Bean的作用域属性是指Bean实例的生命周期和作用域。Spring提供了五种作用域:singleton、prototype、request、session和global session...

Global site tag (gtag.js) - Google Analytics