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

    <router-link> 组件支持用户在具有路由功能的应用中 (点击) 导航. 通过 to 属性指定目标地址,默认渲染成带有正确链接的 <a> 标签,可以通过配置 tag 属 ...

  2. centos7编译安装php7.3

    处理问题   解决php configure: error: Cannot find ldap libraries in /usr/lib.错误 cp -frp /usr/lib64/libldap* ...

  3. 根据传入url请求,返回json字符串

    /** * 根据传入url请求,返回json字符串 * @param url * @return * @throws UnsupportedEncodingException */ public st ...

  4. java——适配器模式、策略模式

    适配器模式: https://www.cnblogs.com/honger/p/5970283.html 策略模式: https://www.jianshu.com/p/3bcf55cf83d3

  5. [python](Docker SDK)上传镜像到私有仓库(tls、身份认证)

    (Docker SDK)上传镜像到私有仓库(tls.身份认证) API:https://docker-py.readthedocs.io/en/stable/ 环境:python:3.7.3 配置参数 ...

  6. Spring——MyBatis整合

    一.xml配置版 1.导入依赖 <!--MyBatis和Spring的整合包 由MyBatis提供--> <dependency> <groupId>org.myb ...

  7. LOJ #2734 Luogu P3615 [JOI2016春季合宿]Toilets (结论、贪心)

    题目链接 (loj) https://loj.ac/problem/2734 (luogu) https://www.luogu.org/problem/P3615 题解 嗯,考场上肝了\(3h\)然 ...

  8. <% 拼写页面

    js中 function udSelect(obj){ var val = $("#"+obj.id).val(); $("select[cd="+obj.id ...

  9. sklearn3_svc分类器预测

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  10. 四、使用jsonpath-JSON Extractor提取复杂响应中的数组及其他字段

    一.jsonpath实时调试url http://jsonpath.com/ 二.对于复杂响应的提取字段 1.json字符串如下: { "code": 0, "data& ...