spring中的bean的生命周期

bean的生命周期:bean的创建 —— 初始化 ——销毁的过程

容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法

在xml配置文件中是在bean的标签内使用init-method和destroy-method

<bean id="person" class="com.springbean.Person" init-method="" destroy-method="" >

这里我们使用注解的方法

第一种指定初始化和销毁方法

首先创建一个bean

public class Foo {

    public Foo(){
        System.out.println("bean的创建");
    }

    public void init(){
        System.out.println("bean的初始化");
    }

    public void destroy(){
        System.out.println("bean的销毁");
    }
} 

创建一个配置类:

@Bean注解上指定初始化和销毁方法
@Configuration
public class MainBeanConfig  {
@Bean(initMethod = "init",destroyMethod = "destroy")public Foo foo(){   return new Foo(); } }

测试:

public class BeanTest {

    @Test
    public void  test(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainBeanConfig.class);
    }
}

bean如果没有指定作用域,就是单例的,就在容器加载的时候就会创建bean,所以打印的结果是:

bean的创建
bean的初始化

销毁:当容器关闭的时候,就会调用destroy方法,打印 bean的销毁

applicationContext.close();

如果要指定bean的作用域为prototype,就需要在配置类中MainBeanConfig,加上注解@Scope("prototype"),如

@Bean@Scope("prototype")public Foo foo(){   return new Foo();}
指定bean的作用域为@Scope("prototype"),这时候容器加载的时候就不会创建和初始化bean,而是在获取bean的时候。

容器关闭的时候也不会去调用destroy方法,需要自己手动调用。

第二种我们通过bean实现InitializingBean(定义初始化逻辑)和DisposableBean(定义销毁逻辑)创建一个类Hero,实现InitializingBean,DisposableBean接口,加上注解@Component
@Componentpublic class Hero implements InitializingBean,DisposableBean {

    public Hero(){
        System.out.println("创建");
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("销毁");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("初始化");
    }
}

在配置中加上注解ComponentScan去扫描包,也可以使用@Import来将组件加入容器中

如:@Import({Hero.class})

@ComponentScan("com.springbean")public class MainBeanConfig  {

测试:

 @Test
    public void  test(){
        AnnotationConfigApplicationContext  applicationContext = new AnnotationConfigApplicationContext(MainBeanConfig.class);
        applicationContext.close();
    }

打印结果:

创建
初始化
销毁

第三种使用@PostConstruct(构造器创建之后)和@PreDestroy(容器销毁之前)两个注解,这是JSR250的两个注解。

  @PostConstruct
    public void init(){
        System.out.println("bean的初始化");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("bean的销毁");
    }

原文地址:https://www.cnblogs.com/tdyang/p/11875454.html

时间: 2024-11-10 15:43:18

spring中的bean的生命周期的相关文章

Spring管理的Bean的生命周期

bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们就要思考一个问题:bean到底是在什么时候才进行实例化的呢?我们以这个问题为引子来展开本文的说明. bean对象无外乎是在以下两个时刻进行实例化的: 调用getBean()方法时. Spring容器启动时. 那么bean对象到底是在哪个时刻进行实例化的,这与Bean的作用域有着某种联系.我们以配置Spring管理的bean的作用域的案例为基础进行深入探讨.为了能够清楚地看到bean对象的实例化,我们需要修改Perso

Spring基础14——Bean的生命周期

1.IOC容器中的Bean的生命周期方法 SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务.SpringIOC容器对Bean的生命周期进行管理的过程: 1)通过构造器或工厂方法创建Bean实例 2)为bean的属性设置值和对其他bean的引用 3)调用Bean的初始化方法 4)Bean可以使用了 5)当容器关闭时,调用Bean的销毁方法 2.验证bean的生命周期 我们可以在Spring的配置文件中声明init-method属性和dest

深入剖析Spring(三)——Bean的生命周期

对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收.而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制.Spring中每个Bean的生命周期如下: 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化. 对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean. 容器通

Spring中Bean的生命周期解读

Spring容器中的Bean拥有明确的生命周期,由多个特定的生命阶段组成,每个生命阶段都允许外界对Bean施加控制.在Spring中,我们从Bean的作用范围和实例化Bean时所经历的一系列阶段来描述Bean的生命周期: BeanFactory中的Bean的生命周期 简单可分为三类 1.Bean自身的方法 (调用Bean的构造函数实例化Bean,调用setter方法设置Bean的属性值,以及通过配置文件当中的Bean的Init-method和Destory-method方法) 2.Bean生命周

Spring Bean的生命周期,《Spring 实战》书中的官方说法

连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试.这里找到了Spring 实战中的官方说法.希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看看源码最好(也包括我自己).哈哈 Bean 的生命周期 在传统的Java应用中,bean的生命周期很简单.使用Java 关键字 new 进行bean 实例化,然后该 bean 就可以使用了.一旦该bean 不再被使用,则由 java 自动进行垃圾回收. 相比之下,Spring 容器中的 bean 的

深究Spring中Bean的生命周期

一.Bean 的完整生命周期 在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了.一旦bean不再被使用,则由Java自动进行垃圾回收. 相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程 Bean 的生命周期 如上图所示,Bean 的生命周期还是比较复杂的,下面来对上图每一个步骤做文字描述:

【转】spring bean的生命周期

spring bean生命周期在传统的Java应用中,Bean的生命周期非常简单. Java的关键词new用来实例化Bean(或许他是非序列化的).这样就够用了. 相反,Bean的生命周期在Spring容器中更加细致. 理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程. 1.容器寻找Bean的定义信息并且将其实例化. 2.受用依赖注入,Spring按照Bean定义信息配置Bean的所有属性. 3.如果Bean实现了BeanNameAwa

Spring中Bean的生命周期

Spring中Bean的生命周期过程: 1.Spring对Bean进行实例化(相当于程序中的new Xx()) 2.Spring将值和Bean的引用注入进Bean对应的属性中 3如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法 (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有在Bean的ID的) 4.如果Bean实现了BeanFactoryAware接口,Spring将调用se

Spring容器中Bean的生命周期

日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此,闲言少叙,书归正传,上图先: 步骤很多,切莫惊慌,我们可以把上面的步骤归纳如下: 1-2:创建实例: 现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西.创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中. 3-4:注入依赖关系: