spring bean初始化和销毁

当实例化一个bean时,可能需要执行一些初始化操作来确保该bean处于可用状态。当不在需要bean的时候,将其从容器中移除时候,我们可能会执行一些清理的工作。

1、spring提供了:InitializingBean和DisposableBean接口

Spring容器以特殊的方式对待实现这两个接口的bean,容许他们进入bean的生命周期。

看下例子:

public class TestSpring implements InitializingBean,DisposableBean {
    //初始化
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet运行了");
    }

    //销毁
    @Override
    public void destroy() throws Exception {
        System.out.println("destroy运行了");
    }

}

spring配置:

<bean id="startAndstop" class="cn.com.ztz.spring.test.TestSpring"/>
public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        ((ClassPathXmlApplicationContext)context).close();
    }

输出结果:

afterPropertiesSet运行了

destroy运行了

虽然这个接口能达到我们要的效果,但是会有一个缺点,bean与Spring的API产生了耦合。下面在介绍一个推荐的方法:

Spring为我们提供了方法:

- init-method:在初始化bean的时候要调用的方法

- destroy-method:在bean从容器移除之前要调用的方法

下面来个例子说明:

public class TestSpring {
    public void start(){
        System.out.println("start被调用了");
    }

    public void stop(){
        System.out.println("stop被调用了");
    }
}

Spring 配置

    <bean id="startAndstop" class="cn.com.ztz.spring.test.TestSpring"
        init-method="start"
        destroy-method="stop"/>

输出结果:

start被调用了

stop被调用了

如果在上下文中定义的很多bean都有相同的名字的初始化方法和销毁方法,我们没有必要每一个bean都声明init-methoddestroy-method 属性。幸运的是,可以使用< beans/>元素的default-init-methoddefault-destroy-method

时间: 2024-10-11 19:52:46

spring bean初始化和销毁的相关文章

(002)spring容器中bean初始化、销毁时执行的方法及其3种实现方式

spring容器中bean初始化或者销毁时会执行一些方法,有3种实现方式. 1.实现InitializingBean.DisposableBean接口,在bean的属性设置后和bean销毁时分别执行afterPropertiesSet和destroy方法 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/

Spring实现初始化和销毁bean之前进行的操作,三种方式

关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二种是:通过 在xml中定义init-method 和  destory-method方法 第三种是:通过bean实现InitializingBean和 DisposableBean接口 下面演示通过  @PostConstruct 和 @PreDestory 1:定义相关的实现类: [java] v

Spring中Bean初始化和销毁方法的几种配置方式

在Bean的生命周期中,Spring可以设置在Bean初始化之后以及在销毁之前要执行的方法. 主要设置方式有以下几种: 通过实现InitializingBean/DisposableBean 接口并重写afterPropertiesSet()/destroy()方法: 通过<bean> 标签的 init-method/destroy-method属性指定: 通过在指定方法上加@PostConstruct或@PreDestroy注解来指定: 通过<beans>标签的 default-

spring-使用注解实现Bean初始化与销毁

一.创建项目    项目名称:spring100804二.在项目中添加spring 支持    1.在项目中创建lib目录        /lib    2.在lib目录下添加jar包        commons-logging.jar        junit-4.10.jar        log4j.jar        spring-beans-3.2.0.RELEASE.jar        spring-context-3.2.0.RELEASE.jar        spring

一次Spring Bean初始化顺序问题排查记录

最近在使用Springboot的时候需要通过静态的方法获取到Spring容器托管的bean对象,参照一些博文里写的,新建了个类,并实现ApplicationContextAware接口.代码大致如下: @Component public class SpringUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void

Spring中Bean初始化及销毁方法(InitializingBean接口、DisposableBean接口、@PostConstruct注解、@PreDestroy注解、以及init-method方法和destroy-method方法)

一. 在Spring中Bean的初始化后以及销毁前的回调方式有: init-method:是指创建bean时调用的方法,注意,不是创建bean的方法. destroy-method:是指销毁bean时调用的方法,同样,不是销毁bean的方法. @PostConstruct注解:在bean实例化和注入后,进行初始化 @PreDestroy:在bean销毁前回调 InitializingBean接口: 查看InitializingBean接口的源码可以发现,只有一个方法,需要pojo继承Initia

使用 Java 配置进行 Spring bean 管理--转

概述 众所周知,Spring 框架是控制反转 (IOC) 或依赖性注入 (DI) 模式的推动因素,而这种推动是通过基于容器的配置实现的.过去,Spring 允许开发人员使用基于 XML 的配置,通过利用应用程序上下文 XML 文件来管理 bean 依赖性.此文件处于应用程序的外部,包含 bean 及其与该应用程序的依赖项的定义.尽管使用 XML 配置较为简单和便捷,但仍有另外一种方法可定义 bean 及其依赖项.这种方法也称为基于 Java 的配置.不同于 XML,基于 Java 的配置使您能够

Spring Bean init-method 和 destroy-method实例

在Spring中,可以使用 init-method 和 destroy-method 在bean 配置文件属性用于在bean初始化和销毁某些动作时.这是用来替代 InitializingBean和DisposableBean接口. 示例 这里有一个例子向您展示如何使用 init-method 和 destroy-method. package com.yiibai.customer.services; public class CustomerService { String message;

Spring中bean的作用域与bean的初始化与销毁

bean的作用域 通过在配置bean时,指定bean元素的scope来指定该bean的作用域 scope的默认值是singleton,即单例模式,在一个ApplicationContext中,每次调用getBean()方法,获取的都是同一个bean. 如果要使每次获取的bean 都不相同可以指定scope的值为prototype,那么每次调用getBean()都会获得一个新的bean Scope还可以去request指在一次Http请求中为单例 session在整个session范围中是单例的