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

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

init-method和destroy-method

创建Bike类

public class Bike {
public Bike(){
System.out.println("Bike Constructor...");
}
public void init(){
System.out.println("bike ...init...");
} public void destroy(){
System.out.println("bike ....destroy...");
}
}

配置类

@Configuration
public class MainConfig { @Bean(initMethod = "init",destroyMethod = "destroy")
public Bike bike(){
return new Bike();
}
}

测试

 @Test
public void test1(){
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MainConfig.class);
context.close(); } 打印结果

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...

 

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

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

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

2 .实现 InitializingBean 和 DisposableBean 接口

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

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

@Component
public class Bike implements InitializingBean, DisposableBean {
public Bike(){
System.out.println("Bike Constructor...");
}
//当bean销毁时调用
public void destroy() throws Exception {
System.out.println("Bike destroy..");
}
//当bean 属性数赋值和初始化是调用
public void afterPropertiesSet() throws Exception {
System.out.println("Bike ....afterPropertiesSet...");
}
}

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

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

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

@Component
public class Bike {
public Bike(){
System.out.println("Bike Constructor...");
}
@PostConstruct
public void init(){
System.out.println("Bike...@PostConstruct...");
}
@PreDestroy
public void destroy(){
System.out.println("Bike...@@PreDestroy...");
}
}

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

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

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

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. kylin实战(一)

    kylin适用场景 OLAP 它适合数据量大,查询维度多,但是业务改动不频繁的场景.因为业务多,则kylin的cube很多.每次业务变更,kylin修改的工作量大,且每次全量跑数据耗费时间比较长. 它 ...

  2. 用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛

    前言 本文灵感来源于Mike Bostock 的一个 demo 页面 原 demo 基于 D3.js v3 开发, 笔者将其使用 D3.js v5 进行重写, 并改为使用 ES6 语法. 源码: gi ...

  3. 14-SQLServer索引碎片

    一.总结 1.数据库的存储本身是无序的,建立聚集索引之后,就会按照聚集索引的物理顺序存入硬盘: 2.建立索引完全是为了提升读取的速度,相对写入的速度就会降低,没有索引的表写入时最快的,但是大多数系统读 ...

  4. Create React App 安装less 报错

    执行npm run eject 暴露模块 安装 npm i  less less-loader -D 1.打开 react app 的 webpack.config.js const sassRege ...

  5. jsp+上传组件+文件夹+文件

    上次遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败. 一开始以为是session过期或者文件大小受系统限制,导致的错误.查看了系统的配置文件没有看到文件大小限制,web.xml中sees ...

  6. Android_(控件)使用自定义控件在屏幕中绘制一条虚线

    在Android屏幕中绘制虚线,最通用的是自定义控件DashedLine,再将自定义控件放入xml布局中 运行截图: 程序结构 package com.example.asus.gary_042; i ...

  7. HDU3844Mining Your Own Business

    目测某年HNOI,(其实这个题是2011年的WF,hdu上找到的,HNOI2012那个中文题在bzoj和loj上都有,叫矿场搭建,题意几乎一样,数据比较弱,交这份代码也能A). 先讲题解,然后说一些有 ...

  8. 新版uni-app 在微信小工具调试遇到报错解决方案

    问题描述:我在运行到微信小程序是运行报错打不开微信小程序报错如下图 结局方案:将微信小程序安全设置开启如下图

  9. Java-AESUtil

    在线版 http://tool.chacuo.net/cryptaes 要使用 AES/CBC/PKCS7Padding 模式需要添加依赖 <!--AES/CBC/PKCS7Padding--& ...

  10. mysql 查看库结构---查看表结构

    查看库结构:SHOW DATABASES; 查看表结构: show tables即为显示当前数据库中所有的表.又如: mysql> use dbname //进入dbname库Database ...