Spring4.0学习笔记(5) —— 管理bean的生命周期

Spring IOC 容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务

Spring IOC 容器对Bean的生命周期进行管理的过程:

1、通过构造器或工厂方法创建Bean的实例

2、为Bean的属性设置值和对其他Bean的引用

3、调用Bean的初始化方法

4、Bean可以使用了

5、当容器关闭时,调用Bean的销毁方法

bean文件

package com.spring.cycle;

public class Car {

    public Car(){
        System.out.println("Car‘s constructor...");
    }

    @Override
    public String toString() {
        return "Car [brand=" + brand + "]";
    }

    private String brand;

    public void setBrand(String brand){
        System.out.println("setBrand...");
        this.brand = brand;
    }

    public void init(){
        System.out.println("init...");
    }

    public void destroy(){
        System.out.println("destroy...");
    }

}

配置文件

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="car" class="com.spring.cycle.Car" init-method="init" destroy-method="destroy">
        <property name="brand" value="Audi"></property>
    </bean>

    <bean class="com.spring.cycle.MyBeanPostProcesser">
    </bean>
</beans>
package com.spring.cycle;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("bean-cycle.xml");
        Car car = (Car)ctx.getBean("car");
        System.out.println(car);
        //关闭IOC容器
        ctx.close();
    }
}

postProcessAfterInitialization 和 postProcessBeforeInitialization

package com.spring.cycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPostProcesser implements BeanPostProcessor {

    public Object postProcessAfterInitialization(Object arg0, String arg1)
            throws BeansException {
        System.out.println("postProcessAfterInitialization"+arg1);
        return arg0;
    }

    public Object postProcessBeforeInitialization(Object arg0, String arg1)
            throws BeansException {
        System.out.println("postProcessBeforeInitialization"+arg1);
        return arg0;
    }

}

bean的生命周期

Car‘s constructor... 【调用构造器】
setBrand... 【设置属性】
postProcessBeforeInitializationcar 【实例化方法前】
init...【实例化bean】
postProcessAfterInitializationcar 【实例化方法后】
Car [brand=Audi] 【调用toString()方法】
destroy... 【销毁bean】

时间: 2024-08-05 11:16:20

Spring4.0学习笔记(5) —— 管理bean的生命周期的相关文章

好记性不如烂笔头86-spring3学习(7)-ApplicationContext中bean的生命周期

假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段.使用ApplicationContext 和BeanFactory对bean的生命周期来看,宏观上基本同样,微观上有一些差异. 假设使用ApplicationContext来生成并管理Bean.在运行BeanfactoryAware的 setBeanFactory()阶段之后.若Bean类上有实现

好记性不如烂笔头85-spring3学习(6)-BeanFactory 中bean的生命周期

如果使用BeanFactory来生成.管理Bean, 一个Bean从建立到销毁,会历经几个执行阶段. 我个人理解一般的bean的生命周期主要包括:建立,初始化,使用阶段,销毁四个核心阶段. 1.@Bean的建立 由BeanFactory读取Bean定义文件,并生成各个Bean实例. 2.初始化@属性注入 执行相关的Bean属性依赖注入 @BeanNameAware的setBeanName() org.springframework.beans.factory.BeanNameAware @Bea

EJB学习笔记五(SessionBean的生命周期)

1.前言 前几篇主要介绍了有状态和无状态.远程和本地调用的SessionBean,这篇介绍一下有关SessionBean的生命周期.SessionBean处于EJB容器管理之下,对于客户端来说是完全透明的.但对于开发者来说,必须要了解SessionBean在EJB容器中的运行规律. 2.为何会有SessionBean的生命周期 EJB容器创建和管理SessionBean实例,有些时候,可能也需要定制SessionBean的管理过程.例如,我想在创建SessionBean实例的时候初始化字段变量,

(转)《深入理解java虚拟机》学习笔记7——Java虚拟机类生命周期

C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对中Class类文件的加载.连接都在运行时执行,虽然类加载和连接会占用程序的执行时间增加性能开销,但是却可以为java语言带来高度灵活性和扩展性,java的针对接口编程和类加载器机制实现的OSGi以及热部署等就是利用了运行时类加载和连接的特性,java的Class类在虚拟机中的生命周期如下: 上图中加

Spring4.0学习笔记(7) —— 通过FactoryBean配置Bean

1.实现Spring 提供的FactoryBean接口 package com.spring.facoryBean; import org.springframework.beans.factory.FactoryBean; public class CarFactoryBean implements FactoryBean<Car> { private String brand; public void setBrand(String brand) { this.brand = brand;

Spring学习笔记——Sprin管理Bean的原理

当我们使用Spring时候在Xml文件中通过 <bean id="service" class="com.finance.service.AmountServiceImpl" /> 配置就可以操作该Bean的属性和方法,那么Spring到底是如何实现的呢?下面让我们自己实现这个过程. 首先我模拟Spring的命名方式创建一个Bean管理类MyClassPathXMLApplicationContext.java,代码如下: // 自定义容器 public

Spring4.0学习笔记(2) —— 自动装配

Spring IOC 容器可以自动装配Bean,需要做的是在<bean>的autowire属性里指定自动装配的模式 1)byType 根据类型自动装配,若IOC 容器中有多个目标Bean类型一致的Bean,Spring将无法判定哪个Bean最适合该属性,不能执行自动装配 2)byName 根据名称自动装配,必须将目标Bean名称和属性名设置的完全相同 配置方法: Address.java package com.spring.autowire; public class Address { p

【51CTO】Spring4.0学习笔记

9.通过工厂方法配置 9.1静态工厂  注意不是配置静态工厂方法实例,而是配置bean实例 class 属性指向静态工厂的全类名 factory-method  指向静态工厂方法的名字 constructor-arg   如果工厂方法需要传入参数 则使用它传入参数     <bean id="car" class="com.alan.factory.CarFactory" factory-method="getCar">       

Spring核心学习(2)管理Bean的生命周期

前导:开始学习Spring核心思想,通过一个山寨精简版Spriing代码结合学习. 内容:1. 抽象BeanFactory-面向接口更易拓展BeanFactory-面向接口更易拓展. 2. 在AbstractBeanFactory内部初始化Bean. 这里的BeanDefinition相比上一个更加丰富,多了BeanDefinition包含的Bean的Class的信息,这里我们不在注册前就把Bean实例化给BeanDefinition,而是延迟到注册的时候才实例化Bean给BeanDefinit