`

Spring的属性初始化解析

 
阅读更多
Spring加载一个Bean是通过其xml中定义的class属性来加载对象的.
通过Bean的name来得到Bean对象
那么Spring的Bean又怎么初始化Bean的属性值的呢。
看文档都是浮云,直接看源码比较清晰.
protected void applyPropertyValues(String beanName, BeanDefinition mbd, BeanWrapper bw, PropertyValues pvs)
通过beanName,BeanDefinition,bw,pvs来初始化属性.
1. 首先验证当前BeanDefinition有没有定义属性转换器,有的话,直接调用bw.setPropertyValues(mpvs);
2. 再验证有没有定义用户的类型转换器。
3. 设置属性值

接下来开始初始化Bean的属性值.
public void setPropertyValue(String propertyName, Object value)
根据属性名,属性值来初始化.
通过反映的方式设置此属性名为属性值.

有人可能会问题了,那如果此属性值指向另一个Bean呢,另一个Bean又指向另一个Bean,那怎么初始化

首先Bean会先初始化自己,然后再初始化Bean引用的一个Bean.[以此类推]
1. 首选检测Bean定义中的构建策略.比如ByName
2. Spring会先检测属性值是不是简单属性,如果是Bean属性那么不是简单属性了.
3. 判断Spring的Bean中是否包含不简单属性.
4. 然后初始化ref的Bean对象,然后注册依赖,再把Ref的Bean设置到
MutablePropertyValues,最后通过以上的set过程,就大功告成了

这段时间闲来无事,专心看了下Spring的源码,有很多可取之处,但也有很多的过度设计,比如接口的独立性,接口的边界不是很清晰,太多的接口,太多的抽象类,抽象类无限继续接口,接口继承接口,抽象类继承抽象类,看似有很多共性,但是可能一个Abstractor可能继承了多个共同的接口。图下:


  • 大小: 41.1 KB
分享到:
评论

相关推荐

    Spring的IoC容器初始化源码解析

    ### Spring的IoC容器初始化源码解析 #### 一、Spring框架的核心——IoC容器 Spring框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented ...

    Spring框架初始化解析

    Spring框架初始化解析 Spring框架初始化解析是指在使用Spring框架时,如何正确地初始化和加载Spring框架的配置和Bean容器。Spring框架的初始化过程是由Spring容器加载和管理的,通过使用不同的加载方式和Bean生命...

    浅谈spring容器中bean的初始化

    4. **初始化回调**:如果Bean定义中指定了初始化方法(通过`init-method`属性),Spring会在所有注入完成后调用这个方法,完成进一步的初始化工作。 5. **Bean的生命周期管理**:Spring提供了预初始化、初始化、后...

    Spring源码解析.pdf

    - 执行初始化方法(如果配置了)。 - **销毁阶段**: - 执行销毁方法(如果配置了)。 #### 六、高级话题 - **Bean的作用域**:包括singleton、prototype、request、session等,不同作用域决定了Bean实例化的...

    这一次搞懂Spring的XML解析原理说明

    5. **预初始化单例bean**:在容器完全初始化之前,预创建所有的单例bean,但不执行任何依赖注入。 6. **初始化消息源**:处理国际化信息,如果配置了`MessageSource`。 7. **完成bean的实例化和依赖注入**:这一步...

    Spring的初始化和XML解析的实现

    Spring框架的初始化与XML解析是其核心功能之一,它使得开发者可以轻松地管理对象和依赖关系,从而实现控制反转(IOC)和面向切面编程(AOP)。在深入讲解之前,我们先理解Spring的基本概念。Spring是一个开源的Java...

    Spring 源码分析(Bean的初始化)

    在Spring框架中,Bean的初始化是一个至关重要的过程,它涉及到从XML配置文件或者注解中读取Bean的定义,解析并构建Bean实例。本篇文章主要分析了Spring如何通过`ClassPathXmlApplicationContext`来启动和初始化Bean...

    spring中的BeanFactory解析xml文件

    6. **后处理**:Spring提供了扩展点,如BeanPostProcessor,允许在bean实例化后和初始化前执行自定义逻辑。 7. **单例管理**:对于单例bean,BeanFactory会缓存它们的实例,确保每次请求时返回的是同一个bean。 ...

    quartz-2.2.3版本的quartz初始化sql语句

    在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息。这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于...

    spring源码深入解析

    4. **IoC容器的生命周期管理**:Spring容器负责Bean的初始化、属性注入、销毁等生命周期管理。开发者可以通过定义初始化方法、销毁方法,以及配置作用域(单例、原型等)来控制Bean的生命周期。 5. **Spring MVC**...

    spring 原码解析 spring 原码解析

    当Spring应用程序启动时,IOC容器会根据配置信息(如XML文件或注解)初始化bean,并管理这些bean的整个生命周期。这个过程主要包括以下几个步骤: 1. **读取配置信息**:根据配置文件或注解信息,解析bean的定义。 ...

    Spring技术内幕:深入解析Spring架构与设计原理

    Spring Boot是近年来非常流行的快速开发工具,它简化了Spring应用的初始化和配置。书中会讨论Spring Boot的核心特性,如自动配置、起步依赖、内嵌Web服务器等,并给出实际案例来展示Spring Boot如何提升开发效率。 ...

    java 解析xml,模拟spring框架ioc

    7. **初始化Bean**:如果Bean实现了InitializingBean接口或者定义了`init-method`属性,Spring会在所有属性注入完成后调用特定的方法来进行初始化。 模拟Spring的IOC功能,我们可以创建一个简单的解析器类,该类...

    Spring源码解析手册

    通过这样的详细解析,读者可以逐步了解Spring如何管理和初始化Bean,以及如何处理复杂的依赖关系,包括循环依赖。此外,对于AOP代理的理解,如AOP如何为Bean创建代理,以及如何在Bean的生命周期中应用拦截器,也将有...

    spring 自定义属性编辑器

    - 注解注册:在Java配置类中,使用`@Bean`注解的方法返回一个`PropertyEditorRegistrar`实现,Spring会在初始化时调用其`registerEditors()`方法。 注册完成后,Spring在遇到需要转换的类型时会自动使用我们注册的...

    Spring IOC设计原理解析.docx

    2. `lazy-init`属性允许延迟初始化Bean,`refresh()`方法后,`finishBeanFactoryInitialization()`处理预实例化的Bean。 3. `FactoryBean`允许自定义Bean的创建逻辑,`AbstractBeanFactory`在获取Bean时会检查是否是...

    spring源代码解析

    从加载过程我们可以看到,首先从Servlet事件中得到ServletContext,然后可以读到配置好的在web.xml的中的各个属性值,然后ContextLoder实例化WebApplicationContext并完成其载入和初始化作为根上下文。当这个根上...

    Spring注解注入属性

    这个处理器负责解析`@Autowired`注解,并在Spring容器初始化bean时执行自动装配操作。通常,只需要在配置文件中声明如下bean即可: ```xml <bean class="org.springframework.beans.factory.annotation....

    springcloud Eureka源码解读.docx

    - `initEurekaServerContext()`:初始化Eureka服务上下文,包括设置Eureka服务的基本属性、初始化服务注册表等。 5. **RESTful接口实现**: - 服务端采用了Jersey框架实现RESTful风格的API接口,以支持客户端和...

    Spring属性占位符PropertyPlaceholderConfigurer的使用

    `PropertyPlaceholderConfigurer`是Spring提供的一个Bean工厂后处理器,它的主要任务是在Spring容器初始化Bean时,替换掉XML配置文件中所有`${...}`形式的占位符,将其替换为对应属性文件中的实际值。这使得我们可以...

Global site tag (gtag.js) - Google Analytics