参考文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle

Spring官方文档是这么写的:

Multiple lifecycle mechanisms configured for the same bean, with different initialization methods, are called as follows:

  1. Methods annotated with @PostConstruct

  2. afterPropertiesSet() as defined by the InitializingBean callback interface

  3. A custom configured init() method

Destroy methods are called in the same order:

  1. Methods annotated with @PreDestroy

  2. destroy() as defined by the DisposableBean callback interface

  3. A custom configured destroy() method

1、Spring生命周期初始化阶段的回调:

1.1 在方法上使用 @PostConstruct 注解,这个方法会在类的构造方法之后执行。

1.2 继承InitializingBean接口,并实现afterPropertiesSet()方法,是接口的回调方法,页会在构造方法之后执行,但执行顺序会在@PostConstruct注解方法之后。

1.3 在类中写一个 init() 方法,但需要使用XML配置上写init-method="init",如:<bean id="**" class="***" init-method="init">

代码如下:

@Service
public class UserServiceImpl implements UserService, InitializingBean { //构造方法
private UserServiceImpl(){
System.out.println("构造方法");
} // Service的方法
public String getUser(){
System.out.println("我是getUser");
return "11";
} @PostConstruct
public void postConstruct(){
System.out.println("PostConstruct");
} public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet");
} }

测试:在测试用例中调用UserServiceImpl的getUser方法,输出的结果如下:

构造方法
PostConstruct
afterPropertiesSet
我是getUser

总结:这三种方法的作用是,构造方法里不好实现的内容,都可以使用这三种方法实现,起到类初始化的加载必要内容的作用。

   推荐使用1.1的方法,方便好用。1.2的方法需要额外继承接口,对类的结构会有破坏性,不推荐使用。因现在追求零配置文件,所以不推荐使用1.3的方法,所以我也没写。

2、Spring生命周期销毁阶段的回调:

2.1 在方法上使用注解@PreDestroy

2.2 继承DisposableBean接口,并实现destroy()方法

2.3 在类中写一个 destroy() 方法,并在XML文件中的bean里配置destroy-method

销毁阶段我没写例子,大家可以自行尝试。

 
3、depends-on显示声明类的前后依赖关系
  这个使用方式表示两个类之间并没有显示的注入依赖关系,但beanOne在初始化时,需要获取manager的内容,比如公共变量等。
3.1 XML声明depends-on
<bean id="beanOne" class="ExampleBean" depends-on="manager"/>
<bean id="manager" class="ManagerBean" />

4、lazy懒加载

  @Lazy 表示在容器初始化时不加载,在真正使用时才把类初始化。

Spring学习总结(4)-Spring生命周期的回调的更多相关文章

  1. Spring 学习笔记---Bean的生命周期

    生命周期图解 由于Bean的生命周期经历的阶段比较多,我们将通过一个图形化的方式进行描述.下图描述了BeanFactory中Bean生命周期的完整过程: Bean 的生命周期从Spring容器着手实例 ...

  2. Spring Environment(三)生命周期

    Spring Environment(三)生命周期 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Envi ...

  3. (转)Spring管理的Bean的生命周期

    http://blog.csdn.net/yerenyuan_pku/article/details/52834011 bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们 ...

  4. Spring 容器中 Bean 的生命周期

    Spring 容器中 Bean 的生命周期 1. init-method 和 destory-method 方法 Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 s ...

  5. Spring学习1:Spring基本特性

    http://longliqiang88.github.io/2015/08/14/Spring%E5%AD%A6%E4%B9%A01%EF%BC%9ASpring%E5%9F%BA%E6%9C%AC ...

  6. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  7. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  8. android官方Api 理解Activity生命周期的回调机制(适合有基础的人看)

    原文地址:http://www.android-doc.com/training/basics/activity-lifecycle/starting.html#lifecycle-states 此处 ...

  9. Activity生命周期的回调,你应该知道得很多其它!--Android源代码剖析(下)

            转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/46910811[yalinfendou的博客]          ...

  10. spring深入学习(二)-----bean的生命周期、IOC容器bean装配

    bean的生命周期 1.实例化Bean对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBea ...

随机推荐

  1. Jenkins 自动化(CI/DI)部署

    1. 背景介绍 在实际开发中,经常要一边开发一边测试,经常为了一个功能而不断更新版本,这些情况都会涉及到频繁的打包.部署:手动打包的涉及到项目上传.打包.发布等很多重复工作: 那么,有一种工具能够实现 ...

  2. 【高并发】面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!

    写在前面 最近,有不少读者说看了我的文章后,学到了很多知识,其实我本人听到后是非常开心的,自己写的东西能够为大家带来帮助,确实是一件值得高兴的事情.最近,也有不少小伙伴,看了我的文章后,顺利拿到了大厂 ...

  3. 萌新计划 PartⅠ

    Part Ⅰ web1-7 题目总体代码框架如下,其中过滤内容不同,大体上通过构造出id=1000类似的语句进行绕过,得到flag <?php # 包含数据库连接文件 include(" ...

  4. scrapy(一):基础用法

    Scrapy 框架 Scrapy 简介 Scray 是用python写的为了爬取网站数据,提取结构性数据的应用框架 Scrapy框架原理图 白话讲解Scrapy 运作流程 代码写好,程序开始运行... ...

  5. selenium 下拉到页面最底端

    selenium操控浏览器下拉到页面最底端: https://www.cnblogs.com/TTyb/p/7662430.html #!/usr/bin/env python # -*- codin ...

  6. 通过实现网站访问计数器带你理解 轻量级锁CAS原理,还学不会算我输!!!

    一.实现网站访问计数器 1.线程不安全的做法 1.1.代码 package com.chentongwei.concurrency; import static java.lang.Thread.sl ...

  7. 【运维--安全相关】cerbot证书自动化续期

    前言 Certbot可以配置为在证书过期之前自动更新证书.由于Let’s Encrypt SSL证书有效期时间为90天,所以建议您利用此功能.您可以通过运行以下命令来测试证书的自动续订: 安装 yum ...

  8. 《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases》论文总结

    Aurora总结 说明:本文为论文 <Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relation ...

  9. react : umi 引入 antd 踩坑

    首先要明确一个问题. 不管是 antd 还是 dva 还是别的什么东西,他们都是 umi 的插件——只要这个项目是使用 umi 脚手架生成的. 所以第一步应该是 .umirc.js (config.j ...

  10. Python 100个样例代码【爆肝整理 建议收藏】

    本教程包括 62 个基础样例,12 个核心样例,26 个习惯用法.如果觉得还不错,欢迎转发.留言. 一. Python 基础 62 例 1 十转二 将十进制转换为二进制: >>> b ...