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

当一个bean被实例化时,它可能需要执行一些初始化使它转换成可用状态。

当bean不再需要,并且从容器中移除是,可能需要做一些清除工作。

为了定义安装和拆卸一个bean,我们只要声明带有init-method和/或destroy-method参数

init-method属性指定一个方法,在实例化bean时,立即调用该方法。

destroy-method指定一个方法,只有从容器中移除bean之后,才能调用该方法。

示例:

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="helloWorld" class="com.microyum.HelloWorld" init-method="init" destroy-method="destroy">
        <property name="message" value="Hello World" />
    </bean>
</beans>

HelloWorld.java

 1 public class HelloWorld {
 2     private String message;
 3
 4     public void getMessage() {
 5         System.out.println("Your Message : " + message);
 6     }
 7
 8     public void setMessage(String message) {
 9         this.message = message;
10     }
11
12     public void init() {
13         System.out.println("Bean is going through init.");
14     }
15
16     public void destroy() {
17         System.out.println("Bean will destroy now.");
18     }
19
20 }

MainApp.java

 1 import org.springframework.context.support.AbstractApplicationContext;
 2 import org.springframework.context.support.ClassPathXmlApplicationContext;
 3
 4 public class MainApp {
 5     public static void main(String[] args) {
 6         AbstractApplicationContext context = new ClassPathXmlApplicationContext(
 7                 "beans.xml");
 8         HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
 9
10         obj.getMessage();
11         context.registerShutdownHook();
12     }
13 }

MainApp.java文件里,需要注册一个在AbstractApplicationContext类中声明的关闭hook的registerShutdownHook()方法。它将确保正常关闭,并且调用相关的destroy方法。

输出信息:

Bean is going through init.
Your Message : Hello World
Bean will destroy now.

如果有太多具有相同名称的初始化或者销毁方法的Bean,那么不需要在每一个bean上声明初始化方法和销毁方法。

框架使用元素中的default-init-method和default-destroy-method属性提供了灵活地配置这种情况。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd"
    default-init-method="init"
    default-destroy-method="destroy">

<bean id="helloWorld" class="com.microyum.HelloWorld">
        <property name="message" value="Hello World" />
    </bean>
</beans>

时间: 2024-08-24 11:52:27

Spring学习笔记3 - Bean的生命周期的相关文章

MyEclipse Spring 学习总结二 Bean的生命周期

文件结构可以参考上一节 Bean的生命周期有方法有:init-method,destroy-method ApplicationContext.xml 文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/

Maven学习笔记之——三套生命周期

Maven学习笔记之--三套生命周期 Maven命令的输入往往就对应了生命周期.比如mvncompile就表示执行默认生命周期阶段compile.Maven的生命周期是抽象的.其实际行为都是由插件完成的.比如mvncompile就可能会由maven-compile-plugin完成.生命周期和插件是协同工作. 1.    何为生命周期 项目构件中进行的清理.编译.测试及部署都可以视作一个一个项目的生命周期.但是每个项目每个人都有不一样的顺序不一样的实现方式.没有统一性带来的不方便已经不言而喻.

spring IOC 容器中 Bean 的生命周期

IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例2.为 Bean 的属性设置值和对其他 Bean 的引用3.调用 Bean 后置处理器接口(BeanPostProcessor),进行初始化前处理4.调用 Bean 的初始化方法5.调用 Bean 后置处理器接口(BeanPostProcessor),进行初始化后处理6.Bean 可以使用了7.当容器关闭时, 调用 Bean 的销毁方法8.在 Bean 的声明里设置 init-method 和 destroy-m

Spring应用上下文中Bean的生命周期

Bean装载到Spring应用上下文的生命周期,如图: Bean在Spring容器中从创建到销毁经历了若干个阶段,每一阶段都可以对Spring如何管理Bean进行个性化定制,以下我们通过代码去验证生命周期以及个性化定制方法: BeanLife实现Aware接口.InitializingBean.DisposableBean接口,自定义生命周期中的方法. /** * @name Bean生命周期 */ public class BeanLife implements BeanNameAware,B

详解spring——IOC之分析Bean的生命周期

https://www.jianshu.com/p/f968bf1a1892 在分析 Spring Bean 实例化过程中提到 Spring 并不是一启动容器就开启 bean 的实例化进程,只有当客户端通过显示或者隐式的方式调用 BeanFactory 的 getBean() 方法来请求某个实例对象的时候,它才会触发相应 bean 的实例化进程,当然也可以选择直接使用 ApplicationContext 容器,因为该容器启动的时候会立刻调用注册到该容器所有 bean 定义的实例化方法.当然对于

android开发学习笔记(二)-activity的生命周期

一:activity的生命周期: 二:created->resumed 当一个应用程序的启动图标被用户点击后,应用程序开始从Activity的onCreate()方法开始执行.(当有多个activity文件时,执行Manifest文件中指定的主activity文件). 当执行完onCreate()方法后,迅速调用onStart(),onResume()方法,用户就可以进行相关的操作. 在onCreate()方法中尽量少执行操作,防止程序运行很久都进入不了界面. 三:Resumed->Pause

React学习笔记-4-什么是生命周期

什么是声明周期?组件本质上就是状态机,输入确定,输出一定确定.如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx.第二个就是组件把状态和结果一一对应起来,从而能够直观的看出来,程序在不同的状态是的输出.属性是由父组件传递给子组件的,状态是子组件内部维护的一些数据,当状态发生变化时候,组件也会进行更新,因此我们可以理解成一个state对应一个render的结果,这样我们就可以知道在不同的state下,组件会render出什么样的结果,从而就知道组件在页面上

Android(java)学习笔记171:Service生命周期

1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Service进程并没有结束,它仍然在后台运行,那我们什么时候用到Service呢?比如我们播放音乐时,有可能想边听音乐边干些其他事情,当我们退出音乐播放应用,如果不用Service,我们就听不到音乐了,所以这个时候我们就要用到Service了,又比如当我们一个应用的数据的通过网络获得.不同时间(一段时间)的数

Android第一行代码学习笔记七---活动的生命周期

@1.返回栈 Android中的活动是可以层叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键就会销毁最上面的活动,下面一个活动就会重新显示出来. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈(Back Stack).栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置.而当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,