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. Java-ConnectDB工具类

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 功能描述: ...

  2. BZOJ 1692: [Usaco2007 Dec]队列变换 (后缀数组/二分+Hash)

    跟BZOJ 4278: [ONTAK2015]Tasowanie一模一样 SA的做法就是把原串倒过来接在原串后面,O(nlogn)O(nlogn)O(nlogn)做后缀数组,就能O(1)O(1)O(1 ...

  3. Program Transformation Semantics (程序转换语义学)

    本文是Inside The C++ Object Model Chapter 2 部分的读书笔记.讨论编译器调用拷贝构造函数时的策略(如何优化以提高效率),侯捷称之为"程序转化的语义学&qu ...

  4. Libreoffice/Office:禁止首字母自动大写功能

     造冰箱的大熊猫@cnblogs 2019/1/24 在LibreOffice(5.1.6.2)中,要禁止或者使能首字母自动大写功能,点击菜单项“Tools>>AutoCorrect Op ...

  5. 一步一步理解线段树——转载自JustDoIT

    一步一步理解线段树   目录 一.概述 二.从一个例子理解线段树 创建线段树 线段树区间查询 单节点更新 区间更新 三.线段树实战 -------------------------- 一 概述 线段 ...

  6. python-numpy-1

    mean() mean() 函数定义: numpy.``mean(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globa ...

  7. pyton3的数字操作你都会用吗?

    '''数字数据类型用于存储数值.数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配空间. 1.del(用于删除一些数字对象的引用) 2.整形(int)通常被称为是整形或者整数,是正 ...

  8. Mac securecrt 破解

      今天花了好长的时间终于在Mac上把SecureCRT安装成功了,网上教程大多没有截图,破解关键步骤含糊,现在把详细的破解过程和SecureCRT使用教程分享给大家.最后把参考的博客连接附在最下方. ...

  9. 【Azure】用“Azure Storage Exlporer”进行磁盘拷贝

    zure Storage Explorer工具的下载 Azure 存储客户端工具 https://docs.azure.cn/zh-cn/storage/storage-explorers Azure ...

  10. ubuntu下如何使得普通用户能够启动wireshark?

    一. 将dumpcap的用户组更改为wireshark sudo chgrp wireshark /usr/bin/dumpcap 二. 设置其他用户也具有与root一样的权限来执行dumpcap s ...