12、生命周期-@Bean指定初始化和销毁方法

  • Bean的生命周期:创建-》初始化-》销毁
  • 容器管理bean的生命周期
  • 我们可以自定义初始方法和销毁方法,容器在bean进行到当期那生命周期的时候调用我们自定的方法
  • 构造(对象创建):
    • 单实例:在容器启动的时候创建
    • 多实例:在实例被每次调用的时候创建对象
  • 初始化:对象创建完成并赋值好,调用初始化方法
  • 销毁:
    • 单实例:在容器关闭的时候进行销毁
    • 多实例:容器不会管理这个bean,不会销毁(可以手动调用)
  1. 指定初始化和销毁方法:

    • 【xml】 指定 init-method="" destroy-method=""
    • 【注解】 @Bean(initMethod = "init",destroyMethod = "destroy")
  2. 通过让Bean实现InitializingBean(定义初始化逻辑)、DisposableBean(定义销毁逻辑)
  3. 可以使用JSR250规范的两个注解:
    • @PostConstruct 在Bean创建完并且属性值赋值完执行
    • @PreDestroy 在Bean销毁之前
  4. BeanPostProcessor:bean的后置处理器,在bean初始化(init)前后进行处理工作
    • postProcessBeforeInitialization 在bean初始化之前
    • postProcessAfterInitialization 在bean初始化之后

12.1 【xml】

<bean id="pension" class="com.hw.springannotation.beans.Pension" scope="prototype" init-method="" destroy-method="">
<property name="name" value="hw"></property>
<property name="age" value="18"></property>
</bean>

12.2 【注解】

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

Car实体类中添加相应的init() 和destroy()方法

package com.hw.springannotation.beans;

/**
* @Description TODO
* @Author hw
* @Date 2018/11/28 16:58
* @Version 1.0
*/
public class Car { public Car() {
System.out.println("Car construct...");
}
public void init(){
System.out.println("Car init ...");
}
public void destroy(){
System.out.println("Car destroy ...");
}
}

12.3 测试

package com.hw.springannotation.test;

import com.hw.springannotation.config.MainConfigOfLifeCycle;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* @Description TODO
* @Author hw
* @Date 2018/11/28 17:01
* @Version 1.0
*/
public class Test_LifeCycle {
/**
* 创建IOC容器
*/
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class); @Test
public void test() {
System.out.println("IOC容器创建完成..."); // 关闭容器
applicationContext.close();
}
}

控制台打印:

多实例的情况下:

12、生命周期-@Bean指定初始化和销毁方法的更多相关文章

  1. @Bean 指定初始化和销毁方法

    bean 的生命周期 bean 的创建 --> 初始化 --> 销毁 ioc 容器管理 bean 的声明周期 可以自定义初始化和销毁方法 构造器( 对象创建 )被调用时机 单实例:在容器启 ...

  2. bean的初始化和销毁方法

    1.bean的生命周期: bean创建---初始化----销毁的过程 容器管理bean的生命周期: 我们可以自定义初始化和销毁方法:容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁 ...

  3. 【Spring Framework】Spring注解设置Bean的初始化、销毁方法的方式

    bean的生命周期:创建---初始化---销毁. Spring中声明的Bean的初始化和销毁方法有3种方式: @Bean的注解的initMethod.DestroyMethod属性 bean实现Ini ...

  4. @PostConstruct 和 @PreDestroy 指定初始化和销毁方法

    通过实现 @PostConstruct 和 @PreDestroy 注解,也可以指定 bean 的初始化和销毁方法 一.Student 类 public class Student{ public S ...

  5. InitializingBean 和 DisposableBean 指定初始化和销毁方法

    通过实现 InitializingBean 和 DisposableBean 接口,也可以指定 bean 的初始化和销毁方法 二.Student 类 public class Student impl ...

  6. Spring bean 实现初始化、销毁方法的方式及顺序

    Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作,常用方法有三种: 使用注解,在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是 ...

  7. 七、spring生命周期之初始化和销毁方法

    一.通过@Bean指定初始化和销毁方法 在以往的xml中,我们是这样配置的 <bean id="exampleInitBean" class="examples.E ...

  8. 【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!

    写在前面 在[String注解驱动开发专题]中,前面的文章我们主要讲了有关于如何向Spring容器中注册bean的知识,大家可以到[String注解驱动开发专题]中系统学习.接下来,我们继续肝Spri ...

  9. 四、Srping之Bean的初始化和销毁

    Srping之Bean的初始化和销毁方法 通常,bean的初始化和销毁方法我们有三个地方可以入手,分别是: 自定义初始化,销毁方法 实现spring提供的InitializingBean(初始化逻辑) ...

随机推荐

  1. sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解

    介绍了sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解 --服务器角色: --固定服务器角色具有一组固定的权限,并且适用于整个服务器范围. 它们专门用于管理 SQL S ...

  2. MVC-初识

    RAZOR视图介绍 一个cshtml,主体是一个html文本,里面可以写前台和后台代码,混合编写(个人认为不太好,应该分离),这个文件最后会被会被编译为一个类(所以他可以像类一样写一些方法,其他的地方 ...

  3. MySQL 新建用户,为用户授权,指定用户访问数据库

    1.登录MySQL mysql -u root -p 2.添加新用户(允许所有ip访问) create user 'test'@'*' identified by '123456';(test:用户名 ...

  4. 数值类型与std::string的相互转换

    1.使用std::stringstream: //将in_value值转换成out_type类型 template<class out_type, class in_value> out_ ...

  5. Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration

    由于博客园不支持markdown,推荐以下url阅读: 原创url:https://blog.csdn.net/weixin_42495873/article/details/103364868 ## ...

  6. 模块 json 和 pickle

    目录 序列化 json 和 pickle 模块 序列化 序列:字符串 序列化:将其它数据类型转换成字符串的过程. 反序列化:字符串转成其它数据类型. 序列化的目的 1:以某种存储形式使用自定义对象持久 ...

  7. C 循环统计输入的单词个数和字符长度

    C 循环统计输入的单词个数和字符长度 #include <stdio.h> #include <Windows.h> int main(void) { ]; ; ; print ...

  8. SSM集成

    SSM集成   Spring和各个框架的整合   Spring目前是JavaWeb开发中最终的框架,提供一站式服务,可以其他各个框架整合集成   Spring整合方案   SSH Ssh是早期的一种整 ...

  9. Postman如何进行参数化

    前言 Postman作为一款接口测试工具,受到了非常多的开发工程师的拥护. 那么做为测试,了解Postman这款工具就成了必要的了. 这篇文章就是为了解决Postman怎么进行参数化的. 全局变量 全 ...

  10. ASE19团队项目beta阶段Backend组 scrum5 记录

    本次会议于12月11日,19:30在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Zhikai Chen, Lihao Ran, Xin Kang 请假人员:Hao Wang 每 ...