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框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented ...
Spring框架初始化解析 Spring框架初始化解析是指在使用Spring框架时,如何正确地初始化和加载Spring框架的配置和Bean容器。Spring框架的初始化过程是由Spring容器加载和管理的,通过使用不同的加载方式和Bean生命...
4. **初始化回调**:如果Bean定义中指定了初始化方法(通过`init-method`属性),Spring会在所有注入完成后调用这个方法,完成进一步的初始化工作。 5. **Bean的生命周期管理**:Spring提供了预初始化、初始化、后...
- 执行初始化方法(如果配置了)。 - **销毁阶段**: - 执行销毁方法(如果配置了)。 #### 六、高级话题 - **Bean的作用域**:包括singleton、prototype、request、session等,不同作用域决定了Bean实例化的...
5. **预初始化单例bean**:在容器完全初始化之前,预创建所有的单例bean,但不执行任何依赖注入。 6. **初始化消息源**:处理国际化信息,如果配置了`MessageSource`。 7. **完成bean的实例化和依赖注入**:这一步...
Spring框架的初始化与XML解析是其核心功能之一,它使得开发者可以轻松地管理对象和依赖关系,从而实现控制反转(IOC)和面向切面编程(AOP)。在深入讲解之前,我们先理解Spring的基本概念。Spring是一个开源的Java...
在Spring框架中,Bean的初始化是一个至关重要的过程,它涉及到从XML配置文件或者注解中读取Bean的定义,解析并构建Bean实例。本篇文章主要分析了Spring如何通过`ClassPathXmlApplicationContext`来启动和初始化Bean...
6. **后处理**:Spring提供了扩展点,如BeanPostProcessor,允许在bean实例化后和初始化前执行自定义逻辑。 7. **单例管理**:对于单例bean,BeanFactory会缓存它们的实例,确保每次请求时返回的是同一个bean。 ...
在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息。这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于...
4. **IoC容器的生命周期管理**:Spring容器负责Bean的初始化、属性注入、销毁等生命周期管理。开发者可以通过定义初始化方法、销毁方法,以及配置作用域(单例、原型等)来控制Bean的生命周期。 5. **Spring MVC**...
Spring Boot是近年来非常流行的快速开发工具,它简化了Spring应用的初始化和配置。书中会讨论Spring Boot的核心特性,如自动配置、起步依赖、内嵌Web服务器等,并给出实际案例来展示Spring Boot如何提升开发效率。 ...
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项目构建过程解析 ...
7. **初始化Bean**:如果Bean实现了InitializingBean接口或者定义了`init-method`属性,Spring会在所有属性注入完成后调用特定的方法来进行初始化。 模拟Spring的IOC功能,我们可以创建一个简单的解析器类,该类...
通过这样的详细解析,读者可以逐步了解Spring如何管理和初始化Bean,以及如何处理复杂的依赖关系,包括循环依赖。此外,对于AOP代理的理解,如AOP如何为Bean创建代理,以及如何在Bean的生命周期中应用拦截器,也将有...
- 注解注册:在Java配置类中,使用`@Bean`注解的方法返回一个`PropertyEditorRegistrar`实现,Spring会在初始化时调用其`registerEditors()`方法。 注册完成后,Spring在遇到需要转换的类型时会自动使用我们注册的...
2. `lazy-init`属性允许延迟初始化Bean,`refresh()`方法后,`finishBeanFactoryInitialization()`处理预实例化的Bean。 3. `FactoryBean`允许自定义Bean的创建逻辑,`AbstractBeanFactory`在获取Bean时会检查是否是...
从加载过程我们可以看到,首先从Servlet事件中得到ServletContext,然后可以读到配置好的在web.xml的中的各个属性值,然后ContextLoder实例化WebApplicationContext并完成其载入和初始化作为根上下文。当这个根上...
这个处理器负责解析`@Autowired`注解,并在Spring容器初始化bean时执行自动装配操作。通常,只需要在配置文件中声明如下bean即可: ```xml <bean class="org.springframework.beans.factory.annotation....
- `initEurekaServerContext()`:初始化Eureka服务上下文,包括设置Eureka服务的基本属性、初始化服务注册表等。 5. **RESTful接口实现**: - 服务端采用了Jersey框架实现RESTful风格的API接口,以支持客户端和...