`

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

    spring boot实战.pdf高清无水印

    1.2.2 使用Spring Initializr初始化Spring Boot项目 10 1.3 小结 18 第2章 开发第一个应用程序 19 2.1 运用Spring Boot 19 2.1.1 查看初始化的Spring Boot新项目 21 2.1.2 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接口,以支持客户端和...

Global site tag (gtag.js) - Google Analytics