spring bean生命周期一---前置阶段:Spring BeanDefinition生成阶段

本文详细探讨了Spring Bean的生命周期,重点关注BeanDefinition的生成过程。从读取解析配置信息,包括XML和注解方式,到BeanDefinition的注册,再到BeanDefinition的合并阶段,特别是如何处理Bean的继承属性。通过源码分析,揭示了Spring如何处理Bean的配置元信息,为面试和实际开发提供深入理解。
摘要由CSDN通过智能技术生成

目录

一、Spring Bean 读取解析配置信息

1.1、 XML 配置的处理主要使用的事例

1.2、注解 BeanDefinition 解析示例

二、spring bean 注册阶段

三、Spring BeanDefinition 合并阶段

3.1、BeanDefinition 合并示例

3.2、源码分析:


 

Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。

在spring bean创建过程 依赖 BeanDefinition 中的信息处理bean的生产。BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口。

在处理配置文件生成BeanDefinition主要经过:Spring Bean 读取解析配置信息、spring bean 注册阶段、Spring BeanDefinition 合并阶段

一、Spring Bean 读取解析配置信息

spring bean的配置信息分为:

  • 1、面向资源

             XML 配置的处理主要使用 :XmlBeanDefinitionReader

            Properties 资源配置:PropertiesBeanDefinitionReader

  • 2、面向注解

          面向注解 BeanDefinition 解析:  AnnotatedBeanDefinitionReader

1.1、 XML 配置的处理主要使用的事例

这里主要基于xml中的构造方法处理:

public class UserHolder {

    private User user;

    public UserHolder() {
    }

    public UserHolder(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "UserHolder{" +
                "user=" + user +
                '}';
    }
}
/**
 * 基于 XML 资源的依赖 Constructor 注入示例
 *
 * @author 
 * @since
 */
public class XmlDependencyConstructorInjectionDemo {

    public static void main(String[] args) {

        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();

        XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);

        String xmlResourcePath = "classpath:/META-INF/dependency-constructor-injection.xml";
        // 加载 XML 资源,解析并且生成 BeanDefinition
        beanDefinitionReader.loadBeanDefinitions(xmlResourcePath);
        // 依赖查找并且创建 Bean
        UserHolder userHolder = beanFactory.getBean(UserHolder.class);
        System.out.println(userHolder);

    }
}

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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="org.geekbang.thinking.in.spring.ioc.overview.domain.User">
        <property name="id" value="1"/>
        <property name="name" value="小马哥"/>
        <property name="city" value="HANGZHOU"/>
        <property name="workCities" val
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值