`
huttoncs
  • 浏览: 200892 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring bean 的初始化流程

 
阅读更多

spring bean的初始化流程按照以下顺序走:

1.执行 构造方法。

一般为无参,下面为有参时的配置

  1. <bean id="user" class="kevin.User">    
  2.     <constructor-arg value="123"></constructor-arg>    
  3.     <constructor-arg value="male"></constructor-arg>    
  4.     <property name="name" value="Kevin"></property>    
  5.     <property name="age" value="99"></property>    
  6. </bean> 

2.执行 setter方法。

3.执行实现了aware接口的相关方法(可能有多个aware方法)

4.init方法前后

   (1) BeanPostProcessor的postProcessorBeforeInitialization方法

  (2)InitializingBean 的 afterPropertiesSet() 方法 (接口)

  (3) init-method 方法 (xml 文件里)

  1. <bean id="helloWorld" class="com.spring.lifecycle.HelloWorld"  
  2.         init-method="customInit" destroy-method="customDestroy">  
  3.         <property name="hello" value="hello world!"></property>  
  4.     </bean>  

   (4) BeanPostProcessor的postProcessorAfterInitialization方法

 

以上几步,可以全没有,可以有其中的几步,但是整体的执行顺序是自上而下的,就跟web.xml执行道理一样。

 

重点说下第3步,该步中有可以细分各个aware 方法,顺序为:

(1) BeanNameAware接口的 setBeanName() 方法。

(2) BeanClassLoaderAware 接口的 setBeanClassLoader() 方法。

(3) BeanFactoryAware 接口的 setBeanFactory() 方法。

(4) ResourceLoader接口的 set...() 方法。(ApplicationContext使用)

(5) ApplicationEventPublisherAware 接口的 set...() 方法。(ApplicationContext使用)

(6) MessageSourceAware 接口的 set...() 方法。(ApplicationContext使用)

(5) ApplicationContextAware 接口的 set...() 方法。(ApplicationContext使用)

(6) ServletContextAware 接口的 set...() 方法。(WebApplicationContext使用,仅对web有用)

 

以上这几小步也是按照顺序执行的,可以全有,可以全没有,也可以有其中的一步或几步

 

spring框架自己的实现类就是按照这种流程走的。

spring框架就几个核心的接口,然后大部分都是实现类,来实现这一个或多个核心接口。

分享到:
评论

相关推荐

    Spring Bean创建初始化流程.docx

    以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`AnnotationConfigApplicationContext`类创建一个上下文实例,通常传入一个或多个配置类(`annotatedClasses`),...

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...

    Spring Bean的初始化和销毁实例详解

    Spring Bean的初始化和销毁实例详解 Spring Bean的初始化和销毁是Spring框架中一个非常重要的概念,它们都是Bean生命周期中不可或缺的一部分。在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下...

    springBean加载过程源码解析文档,附有代码类名和行数

    Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责加载和管理 Bean。 SpringApplication...

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    3. **@PostConstruct与初始化回调**:Spring允许我们在Bean初始化后执行特定代码,通常通过`@PostConstruct`注解的方法来实现。如果这个方法被意外地调用了两次,那么Bean也会被构造两次。检查是否有多处调用或配置...

    spring bean XML配置入门

    一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...

    Spring实例化Bean顺序

    但是,这并不总是可靠的,因为Spring通常会延迟初始化Bean,除非显式要求或存在依赖关系。 2. **依赖注入**:Spring容器会根据Bean之间的依赖关系来决定实例化顺序。如果一个Bean依赖于另一个Bean,那么被依赖的...

    浅谈spring容器中bean的初始化

    在Spring框架中,Bean的初始化是一个关键的概念,它涉及到Bean的生命周期管理以及Spring容器如何创建、配置和管理这些Bean。本文将深入探讨Spring容器中Bean的初始化过程。 首先,Spring容器根据XML配置文件(如`...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。

    Spring源码学习六:bean初始化1

    在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的过程,特别是`finishBeanFactoryInitialization()`方法和`preInstantiateSingletons()`方法。 首先,`finishBeanFactoryInitialization(Confi‌...

    spring bean life cycle

    通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean初始化前后进行额外的操作。 在Spring容器中,Bean的生命周期管理也支持通过`BeanDefinition`进行定制。例如,...

    Spring Bean 加载顺序 .

    7. **Bean初始化**: 实例化完成后,Spring会执行Bean的初始化方法,包括调用`@PostConstruct`注解的方法。同时,如果Bean实现了InitializingBean接口,其`afterPropertiesSet()`方法也会被调用。 8. **初始化后...

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    此外,Spring提供了BeanPostProcessor接口,允许我们在Bean初始化前后进行自定义处理。通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean实例化和初始化之后进行...

    初始化后可访问Spring管理的Bean

    初始化后可访问Spring管理的Bean

    实例化Spring bean的两种工厂方法

    Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由Spring容器控制。实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置等。而工厂方法是其中一种自定义实例...

    spring bean的生命周期测试代码

    4. **容器回调**:在Bean初始化之后,Spring容器可能会调用自己的回调方法,如`BeanPostProcessor`接口实现的`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,允许自定义逻辑进一步...

    Spring Bean生命周期.pdf

    - InitializingBean:对应初始化阶段,它提供了afterPropertiesSet方法供开发者实现Bean初始化逻辑。 - DisposableBean:对应销毁阶段,它提供了destroy方法供开发者实现Bean销毁逻辑。 整个Spring Bean的生命...

Global site tag (gtag.js) - Google Analytics