Bean生命周期 Bean创建 -->初始化 -->销毁

1.自定义Bean初始化 和销毁的方法

init-method和destroy-method

创建Bike类

  1. public class Bike {
  2. public Bike(){
  3. System.out.println("Bike Constructor...");
  4. }
  5. public void init(){
  6. System.out.println("bike ...init...");
  7. }
  8.  
  9. public void destroy(){
  10. System.out.println("bike ....destroy...");
  11. }
  12. }

配置类

  1. @Configuration
  2. public class MainConfig {
  3.  
  4. @Bean(initMethod = "init",destroyMethod = "destroy")
  5. public Bike bike(){
  6. return new Bike();
  7. }
  8. }

测试

  1. @Test
  2. public void test1(){
  3. AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MainConfig.class);
  4. context.close();
  5.  
  6. }
  7.  
  8. 打印结果

Bike Constructor...
bike ...init...
十月 15, 2019 10:05:36 上午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@5c0369c4: startup date [Tue Oct 15 10:05:35 CST 2019]; root of context hierarchy
bike ....destroy...

  1.  

对于单实例的bean 可以正常调用初始化和销毁方法

对于多实例的bean( @Scope("prototype") )   容器只负责初始化(第一次获取该bean实例时才会创建并初始化) 但不会管理bean ,容器关闭时不会调用销毁方法

单例懒加载的bean (@lazy)第一次调用时初始化bean 容器会管理

2 .实现 InitializingBean 和 DisposableBean 接口

afterPropertiesSet() 当beanFactroy 创建好对象,并且把bean所有属性设置好之后,会调用这个方法。

destroy()  当一个单例bean销毁时 BeanFactory 会调用这个销毁方法 ,       在容器关闭时,应用上下文会销毁所有的单例bean。

  1. @Component
  2. public class Bike implements InitializingBean, DisposableBean {
  3. public Bike(){
  4. System.out.println("Bike Constructor...");
  5. }
  6. //当bean销毁时调用
  7. public void destroy() throws Exception {
  8. System.out.println("Bike destroy..");
  9. }
  10. //当bean 属性数赋值和初始化是调用
  11. public void afterPropertiesSet() throws Exception {
  12. System.out.println("Bike ....afterPropertiesSet...");
  13. }
  14. }

3.  使用JSR250 规则  定义的两个注解

@PostConstruct  在bean创建完成 ,且属性复制完成后进行初始化,属于JDK规范的注解

@PreDestroy  在bean将被移除之前进行通知,在容器晓辉之前进行清理工作

  1. @Component
  2. public class Bike {
  3. public Bike(){
  4. System.out.println("Bike Constructor...");
  5. }
  6. @PostConstruct
  7. public void init(){
  8. System.out.println("Bike...@PostConstruct...");
  9. }
  10. @PreDestroy
  11. public void destroy(){
  12. System.out.println("Bike...@@PreDestroy...");
  13. }
  14. }

4.  BeanPostProcessor    bean的后置处理器  ,在bean初始化之前调用进行拦截 ,在bean初始化前进行一些处理工作

使用 BeanPostProcessors 实现两个接口   postProcessBeforeInitialization 和 postProcessAfterInitialization

  1. @Component
  2. public class TestBeanPostProcessor implements BeanPostProcessor{
  3.  
  4. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  5. //返回一个对象 (传过来的对象)
  6. //在初始化方法调用之前进行后置处理
  7. //init-mothed 调用之前
  8. System.out.println("postProcessBeforeInitialization..."+beanName+"..."+bean);
  9. return bean;
  10. }
  11.  
  12. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  13. // init-monthod 调用之后
  14. System.out.println("postProcessBeforeInitialization..."+beanName+"..."+bean);
  15. return bean;
  16. }
  17. }
  1. @Configuration
  2. @ComponentScan("cn.qin")
  3. public class MainConfig {
  4.  
  5. @Bean
  6. public Person person(){
  7. System.out.println("给容器中添加 Person");
  8. return new Person();
  9. }
  10. @Bean(initMethod = "init",destroyMethod = "destroy")
  11. public Bike bike(){
  12. return new Bike();
  13. }
  14.  
  15. }

bean初始化和销毁的几种方式的更多相关文章

  1. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入

    <spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...

  2. @Autowired注解和启动自动扫描的三种方式(spring bean配置自动扫描功能的三种方式)

    前言: @Autowired注解代码定义 @Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, Elemen ...

  3. spring bean初始化及销毁你必须要掌握的回调方法

    spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作. 初始化的时候实现的方法 1.通过java提供的@PostConstruct注解: 2.通过实现spring提供的Initi ...

  4. spring bean初始化和销毁

    spring bean的创建与消亡由spring容器进行管理,除了使用<bean><property/></bean>进行简单的属性配置之外,spring支持更人性 ...

  5. Java 中初始化 List 集合的 6 种方式!

    List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 1.常规方式 List<String> ...

  6. SpringBoot中资源初始化加载的几种方式(看这一片就够了)

    一.问题 在平时的业务模块开发过程中,难免会需要做一些全局的任务.缓存.线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢? 二.资源初始化 1.既然要做资源的初始化,那么 ...

  7. Java 中初始化 List 集合的 7 种方式

    1.常规方式 List<String> languages = new ArrayList<>(); languages.add("Java"); lang ...

  8. SpringBoot中资源初始化加载的几种方式

    一.问题 在平时的业务模块开发过程中,难免会需要做一些全局的任务.缓存.线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢? 二.资源初始化 1.既然要做资源的初始化,那么 ...

  9. Spring中bean的初始化和销毁几种实现方式

    Bean的生命周期 : 创建bean对象 – 属性赋值 – 初始化方法调用前的操作 – 初始化方法 – 初始化方法调用后的操作 – --- 销毁前操作 – 销毁方法的调用. [1]init-metho ...

随机推荐

  1. pycharm图像不能显示,之前是可以显示的。显示一两次突然不显示了

    网上说是什么包问题的就说了.我遇到一个非常奇葩的问题 因为你的设置可能是这样 每次都在窗口右侧的工具栏那边显示.可能突然心情不佳就不显示了.然后你再把勾去掉即可.你要喜欢再点上也行.

  2. ionic使用CardIO实现扫描银行卡功能(只能扫描16位以下,并且是浮雕数字)

    在一些涉及支付功能的app,一般需要绑定银行卡,除了靠用户手动输入银行卡号,用手机扫描银行卡也是一种常用的手段,查阅了写资料,发现ionic有CardIO插件可以实现这个功能,就兴致冲冲去尝试,结果有 ...

  3. Typescript玩转设计模式 之 创建型模式

    作者简介 joey 蚂蚁金服·数据体验技术团队 前言 我们团队的工作是用单页面应用的方式实现web工具.涉及到数万到十数万行的前端代码的管理,而且项目周期长达数年. 怎么样很好地管理好这种量级的前端代 ...

  4. Redux应用多人协作的思路和实现

    先上Demo动图,效果如下: 基本思路 由于redux更改数据是dispatch(action),所以很自然而然想到以action作为基本单位在服务端和客户端进行传送,在客户端和服务端用数组来存放ac ...

  5. tomcat不能处理图形

    https://blog.csdn.net/yfx000/article/details/86591945 不让java寻找linux图形界面即可,在java启动时加选项java -Djava.awt ...

  6. vue 手机物理返回键关闭弹框

    1.打开弹窗调用 window.history.pishState() 函数 2.关闭弹框 3.mounted 生命周期 监听popstate 事件 4.beforeDestroy 生命周期 移除po ...

  7. Flash上传超大文件解决方案

    文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...

  8. Codeforces 1214 F G H 补题记录

    翻开以前打的 #583,水平不够场上只过了五题.最近来补一下题,来记录我sb的调试过程. 估计我这个水平现场也过不了,因为前面的题已经zz调了好久-- F:就是给你环上一些点,两两配对求距离最小值. ...

  9. YY的GCD【luoguP2257】

    题目大意 有至多\(10000\)组询问,问\(1 < i \leqslant N \leqslant 10000000, 1 < j \leqslant M \leqslant 1000 ...

  10. JavaWeb_(Struts2框架)参数传递之接收参数与传递参数

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...