spring 中bean生命周期

从头开始学习spring(一)

传统编程中,依赖关系比较多的情况下,导致维护成本直线上升,spring 采用Ioc对bean进行管理,减少了开发人员的工作量

正确理解spring bean 的生命周期非常重要

package com.study.spring.beans;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MyBeanLifeCycle implements BeanNameAware, BeanFactoryAware,
    ApplicationContextAware, BeanPostProcessor, InitializingBean, DisposableBean {

    @Override
    public void setBeanName(String s) {
        System.out.println("bean id : " + s);
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("destroy");
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("beanFactory : " + beanFactory.toString());
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("applicationContext : " + applicationContext.getApplicationName());
    }

    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
        System.out.println("postProcessBeforeInitialization : " + s);
        return o;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        System.out.println("postProcessAfterInitialization : " + s);
        return o;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet");
    }
}

applicationContext.xml

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

  <bean class="com.study.spring.service.impl.HelloServiceImpl" id="helloService"/>

  <bean id="myBean" class="com.study.spring.beans.MyBeanLifeCycle"/>

</beans>

  

时间: 2024-08-28 15:40:15

spring 中bean生命周期的相关文章

spring中bean生命周期

一  bean指定初始化和销毁方法 1.bean的生命周期:bean的创建 ---> 初始化 ---> 销毁的过程   bean的生命周期有容器来管理   单例的bean在创建时执行初始化方法,在spring关闭时执行销毁方法   原型的bean在每次获取时执行初始化方法,没有销毁方法   我们可以自己指定初始化和销毁方法,要指定的方法必须是bean所属的类的方法.注意:这个方法必须是个无参的方法 2.创建实体类 public class Car { private String name;

Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析

在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近吧整个流程化成了一个流程图.待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程.注意因为代码比较多,这里的流程图只画出了大概的流程,具体的可以深入代码 一.获取Bea 第一阶段获取Bean 这里的流程图的入口在 AbstractBeanFactory类的 doGetBean方法,这里可以配合前面的 getBean方法分析文章进行阅读.主要流程就是 1.先处理Bean 的名称,因为如果以“&”开头的Bean名称

Spring中Bean的生命周期

Spring中Bean的生命周期过程: 1.Spring对Bean进行实例化(相当于程序中的new Xx()) 2.Spring将值和Bean的引用注入进Bean对应的属性中 3如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法 (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有在Bean的ID的) 4.如果Bean实现了BeanFactoryAware接口,Spring将调用se

Spring中Bean的生命周期解读

Spring容器中的Bean拥有明确的生命周期,由多个特定的生命阶段组成,每个生命阶段都允许外界对Bean施加控制.在Spring中,我们从Bean的作用范围和实例化Bean时所经历的一系列阶段来描述Bean的生命周期: BeanFactory中的Bean的生命周期 简单可分为三类 1.Bean自身的方法 (调用Bean的构造函数实例化Bean,调用setter方法设置Bean的属性值,以及通过配置文件当中的Bean的Init-method和Destory-method方法) 2.Bean生命周

JAVA面试题:Spring中bean的生命周期

Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题. 然而在spring中 可以设定每次从BeanFactory或Appl

Spring中bean对象的生命周期

Spring提供了一些接口来提供一些方法,体现了bean对象在Spring容器中的生命周期 具体的过程可以体现为: 读取权限类名->构建一个类对象->用这个类对象通过无参构造器newInstance()构建对象 ↓ 调用set方法注入依赖 ↓ 如果这个Bean已经实现了BeanNameAware接口 调用它实现的setBeanName(String name)方法 此处传递的就是Spring配置文件中Bean的name值 ↓ 如果这个Bean已经实现了BeanFactoryAware接口 容器

Spring:Spring中bean的生命周期

Spring中,从BeanFactory或ApplicationContext取得的实例为Singleton(单例模式),就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题. 然而在spring中 可以设定每次从BeanFactory或ApplicationContext指定别名并

深究Spring中Bean的生命周期

一.Bean 的完整生命周期 在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了.一旦bean不再被使用,则由Java自动进行垃圾回收. 相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程 Bean 的生命周期 如上图所示,Bean 的生命周期还是比较复杂的,下面来对上图每一个步骤做文字描述:

Spring点滴四:Spring Bean生命周期

Spring Bean 生命周期示意图: 了解Spring的生命周期非常重要,我们可以利用Spring机制来定制Bean的实例化过程. --------------------------------------------------------------------------------------------------------------------------------------------------- spring-service.xml: <?xml version=