Spring学习笔记--initmethod和构造函数、setter方法的加载顺序

今天学习了一下spring中bean的初始化和销毁,突然想了解一下初始化方法跟构造函数及setter方法注入的执行顺序,记录在此,仅作为学习笔记。

当实例化一个bean时,可能需要执行一些初始化操作来确保该bean处于可用状态。同样地,当不再需要bean时,将其从容器中移除是,我们可以还需要按顺序

执行一些清除工作。

package com.zp.chapter2;

public class Auditorium {
    private String name;

    public void doBefore() {
        System.out.println("bean初始化操作!");
    }

    public void doAfter() {
        System.out.println("bean销毁操作!");
    }

    public Auditorium() {
        System.out.println("bean构造函数");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("setter方法注入");
        this.name = name;
    }

    public void display() {
        System.out.println("display()方法");
    }
}

配置文件中bean的声明

<bean id="auditorium" class="com.zp.chapter2.Auditorium" init-method="doBefore" destroy-method="doAfter">
        <property name="name" value="abcd"></property>
</bean>

测试代码

@Test
public void Test5() throws PerformanceException {
        AbstractApplicationContext app = new ClassPathXmlApplicationContext(
                "com/zp/chapter2/springbeans.xml");
        Auditorium auditorium=(Auditorium) app.getBean("auditorium");
        auditorium.display();
        app.registerShutdownHook();
}

注意:这里的registerShutdownHook()是AbstractApplicationContext中的一个钩子方法,在jvm退出时关闭上下文;

输出结果:

bean构造函数
setter方法注入
bean初始化之前的操作!
display()方法
bean销毁之后 的操作!

所以,可以看出执行顺序是构造函数-〉setter方法注入-〉initmethod->调用的方法-〉destroymethod

Spring学习笔记--initmethod和构造函数、setter方法的加载顺序

时间: 2024-12-08 13:32:42

Spring学习笔记--initmethod和构造函数、setter方法的加载顺序的相关文章

Bean初始化之postProcessBeforeInitialization、afterPropertiesSet、init-method、postProcessAfterInitialization等方法的加载

一.简单介绍 1.init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置.init-method需要在applicationContext.xml配置文档中bean的定义里头写明.例如:<bean id="TestBean" class="nju.software.xkxt.util.TestBean" init-method="init"></bean> 这样,当TestBean在初始化

Android异步加载学习笔记之四:利用缓存优化网络加载图片及ListView加载优化

如果不做任何处理,直接用网络加载图片在网速快的情况下可能没什么不好的感觉,但是如果使用移动流量或是网络不好的时候,问题就来了,要么用户会抱怨流量使用太多,要么抱怨图片加载太慢,如论从哪个角度出发,都不是好的体验!要提高用户体验,我们就要使用缓存.Android中数据缓存的方式有很多,相关介绍的文章也比较多,比如http://blog.csdn.net/dahuaishu2010_/article/details/17093139和http://www.jb51.net/article/38162

Spring学习笔记之初始化和销毁方法的调用次序

Multiple lifecycle mechanisms configured for the same bean, with different initialization methods, are called as follows: Methods annotated with @PostConstruct    afterPropertiesSet() as defined by the InitializingBean callback interface     A custom

Spring学习笔记14---bean的使用

前言 Spring最基础的功能就是一个bean工厂,所以本文讲解的是Spring生成bean的种种方法及细节,Spring配置文件的名字是bean.xml,定义几个类: 一个Person类: public class Person { private String personName; // 人的名字 private int personAge; // 人的年龄 public Person(String personName, int personAge) { this.personName

不错的Spring学习笔记(转)

Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是spring.jar和commons-logging.jar.此外为了便于测试加入了JUnit包.   在Myeclipse中创建Java项目.   编写一个接口类,为了简单,只加入了一个方法.   Java代码   1.package com.szy.spring.interfacebean;  

Spring学习笔记(一)

Spring学习笔记(一) Spring核心思想: IOC:  Inversion Of Control (控制反转) / DI: Dependency Injection (依赖注入) AOP: Aspect Oriented Programming (面向切面编程) IOC 1. 简单的应用 Model package com.wangj.spring.model; public class User { private String username; private String pas

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)

<Spring学习笔记>:Spring.Hibernate.struts2的整合(以例子来慢慢讲解,篇幅较长) 最近在看马士兵老师的关于Spring方面的视频,讲解的挺好的,到了Spring.Hibernate.struts2整合这里,由于是以例子的形式来对Spring+Hibernate+struts2这3大框架进行整合,因此,自己还跟着写代码的过程中,发现还是遇到了很多问题,因此,就记录下. 特此说明:本篇博文完全参考于马士兵老师的<Spring视频教程>. 本篇博文均以如下这

Spring学习笔记 2014-7-9

Spring需要applicationContext.xml来管理各个Bean,其基本格式: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t

Spring学习笔记(三)

Spring学习笔记(三) AOP 一.使用Annotation方式实现AOP.步骤: xml里加入配置:<aop:aspectj-autoproxy /> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org