(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/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.edu.spring</groupId>
    <artifactId>spring</artifactId>
    <version>1.0.0</version>

    <name>spring</name>
    <!-- FIXME change it to the project‘s website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
    </dependencies>

</project>

  Cat.java

package com.edu.spring;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class Cat implements InitializingBean,DisposableBean{

    @Override
    public void afterPropertiesSet() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("-----------afterPropertiesSet--------------");
    }

    @Override
    public void destroy() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("-----------destroy--------------");
    }

}

  MyConfig.java

package com.edu.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {

    @Bean
    public Cat createCat(){
        return new Cat();
    }
}

  App.java

package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
        System.out.println(context.getBean(Cat.class));
        context.close();
    }
}

  运行结果如下:

2、在@Bean注解中用initMethod和destroyMethod两个属性指定实体类中的两个方法,这两个方法分别在bean初始化和销毁时候执行

  Dog.java

package com.edu.spring;

public class Dog {

    public void init(){
        System.out.println("----------Dog init---------");
    }

    public void destroy(){
        System.out.println("----------Dog destroy---------");
    }
}

  MyConfig.java

package com.edu.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {

    @Bean(initMethod="init",destroyMethod="destroy")
    public Dog createDog(){
        return new Dog();
    }
}

  App.java

package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
        System.out.println(context.getBean(Dog.class));
        context.close();
    }
}

  运行结果如下:

3、在实体类中方法上面分别添加@PostConstruct和@PreDestroy注解,分别指定初始化和销毁方法

  Animal.java

package com.edu.spring;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class Animal {

    @PostConstruct
    public void initial(){
        System.out.println("-------initial---------");
    }

    @PreDestroy
    public void close(){
        System.out.println("---------close---------");
    }
}

  MyConfig.java

package com.edu.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {

    @Bean
    public Animal createAniaml(){
        return new Animal();
    }
}

  App.java

package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
        System.out.println(context.getBean(Animal.class));
        context.close();
    }
}

  运行结果如下:

原文地址:https://www.cnblogs.com/javasl/p/11783018.html

时间: 2024-08-02 02:50:10

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

spring容器中bean的作用范围

spring容器中bean的作用范围范围五类,bean的作用范围不同对bean的生命周期和创建方式也会产生一定的影响. singleton  以单例形式存在,容器中仅有一个bean实例. prototype  每次从容器中调用bean时,容器都创建一个新的实例,每次调用都相当于new一个新的对象. request 每次http请求都会创建一个新的bean. 此作用域仅适用于webApplicationContext环境. session 同一个session共享同一个bean,不同的sessio

spring容器中bean的初始化

当我们在spring容器中添加一个bean时,如果没有指明它的scope属性,则默认是singleton,也就是单例的. 例如先声明一个bean: public class People { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String get

Spring容器中Bean的生命周期

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

Spring容器中bean的作用域

singleton:单体模式,在整个Spring IoC容器中只有一个实例. prototype:原型模式,每次通过容器的getBean获取的bean都会产生一个新的实例. request:对于每次HTTP的请求,使用request定义的bean都会产生一个新的实例. session:对于每次HTTP Session的,使用Session定义的bean都会产生一个新的实例. global:对于全局的HTTP Session对应一个bean.

在spring容器中定义初始化和销毁bean前所做的操作,有三种方式

1.使用注解,通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 package com.luoq.test.annotation.init; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class TestBean { private String message; public String getMessage()

Java项目启动时执行指定方法的几种方式

1.使用 @PostConstruct,作用于方法上面. @Componentpublic class PostConstruct { @PostConstruct public void test() { System.out.println("PostConstruct:开始运行..."); }} 2.使用 ApplicationRunner. @Componentpublic class Start implements CommandLineRunner { @Override

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

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

[原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

spring IOC 容器中 Bean 的生命周期

IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例2.为 Bean 的属性设置值和对其他 Bean 的引用3.调用 Bean 后置处理器接口(BeanPostProcessor),进行初始化前处理4.调用 Bean 的初始化方法5.调用 Bean 后置处理器接口(BeanPostProcessor),进行初始化后处理6.Bean 可以使用了7.当容器关闭时, 调用 Bean 的销毁方法8.在 Bean 的声明里设置 init-method 和 destroy-m