一 Spring容器技术内幕
1 内部工作机制
对于这个IOC流水线,其实没必要了解太过详细,大概知道Spring从加载配置文件到创建一个完整Bean的大概流程就可以。如果需要详细了解spring的内部实现,可以参考Spring源码解析。我过段时间也会去看看那本书。
2.BeanDefinition
org,soringframework.beans.factory.config.BeanDefinition是配置文件<bean>元素标签在容器中内部表示形式。一般情况下,BeanDefinition只在容器启动时加载并解析,除非容器刷新或重启,这些信息不回发生变化,当然如果用户有特殊的需求,也可以通过编程的方式运行期调整BeanDefinition的定义。
创建最终的BeanDefinition主要包括两个步骤
- 1.利用BeanDefinition对配置信息Resource进行读取,通过XML解析器解析配置信息的DOM对象,简单的为每个<bean>生成对应的BeanDefinition对象。但是这里生成的BeanDefinition可能是半成品,因为在配置文件中,我们可能通过占位符变量引用外部属性文件的属性,这些占位符变量在这一步还没有被解析出来
- 利用容器中注册的BeanFactoryPostProcessor对半成品的BeanDefinition进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的BeanDefinition就为成品的BeanDefinition。
3.InstantiationStrategy
org.springframework.beans.factory.support.InstantiationStrategy负责根据BeanDefinition对象创建一个Bean实例。Spring之所以实例化Bean的工作通过一个策略接口进行藐视,是为了方便可以采用不同的实例化策略,以便满足不同的应用需求。
4.BeanWrapper
org.springframework.beansBeanWrapper是Spring框架中重要的组件类。BeanWrapper相当于一个代理器,Spring通过BeanWrapper完成Bean属性的填充工作。在bean实例被InstantiationStrategy创建出来之后,容器主控制程序将bean实例通过BeanWrapper包装起来。
二,属性编辑器
在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对弈字符创类型的字面值。BeanWrapper填充Bean属性一定有一个转换器在其中起作用,这个转换器就是属性编辑器。
PropertyEditor是JavaBean规范定义的接口。
三 使用外部属性文件
简单实例
<!-- 引入jdbc.properties-属性文件-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="classpath:com/baobaobao/placeholder/jdbc.properties"
p:fileEncoding="utf-8"/>
<!-- 通过属性名引用属性值 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="${driverClassName}"
p:url="${url}"
p:username="${username}"
p:password="${password}"/>
PeopertyPlaceholderCOnfigurer其他属性
- location:如果只有一个属性文件,直接使用location属性指定就可以了,如果是多个属性文件,则可以通过locations属性进行设置,可以向配置List一样配置locations。
- fileEncoding:属性文件的编码格式,Spring使用操作系统默认编码读取属性文件,如果属性文件采用了特殊编码,需要通过该属性显式指定。
- order:如果配置文件中定义了多个PropertyPlaceholderConfigurer,则通过该属性指定有限顺序。
- placeholderPrefix:在上面的例子中,么通过${属性名}引用属性文件中的属性项,其中"${"为默认的占位符前缀,可以根据需要改为其他的前缀符。
- placeholderSuffix:占位符后缀,默认为"}"
- 大小: 119.1 KB
分享到:
相关推荐
开发者可以通过阅读这些文档快速上手,并深入学习Spring的高级特性,如依赖注入、AOP(面向切面编程)、数据访问、Web应用、测试等。 2. **libs文件夹**: 这个文件夹包含了Spring框架所需的jar包,这些jar包涵盖...
IoC使得对象的创建和管理由Spring容器负责,而不是由代码直接创建,这样降低了组件之间的耦合度。AOP则允许开发者定义“切面”,将关注点如日志、事务管理等与业务逻辑分离,提高了代码的可维护性和可复用性。 该...
这些文档涵盖了从基本概念到高级特性的所有内容,是学习和使用Spring不可或缺的资源。 “spring-5.3.2-schema.zip”文件则包含了Spring配置文件的XML Schema定义,这些定义帮助开发者更好地理解和编写符合规范的...
通过在Tomcat的类加载器上注册`LoadTimeWeaver`,Spring可以在应用部署时动态地插入额外的字节码,实现诸如事务管理、缓存控制等高级功能。 Tomcat本身是一个流行的开源Java Servlet容器,它负责加载并运行Web应用...
同时,BeanFactory和ApplicationContext接口是Spring容器的基石,它们管理着对象的生命周期和依赖关系。 其次,Spring的AOP(面向切面编程)在2.5.6版本中也得到支持。AOP允许开发者定义"切面",即跨越多个对象的...
总之,这个压缩包是学习Spring框架源码的宝贵资源,无论你是想要了解Spring的基本工作原理,还是想深入研究其高级特性,都能从中受益匪浅。通过阅读和分析源码,开发者能够更有效地利用Spring框架,设计出更高效、更...
《Spring Framework 5.0.1.RELEASE:官方完整包与文档详解》 Spring Framework作为Java开发中的核心框架...无论你是初学者还是经验丰富的开发者,Spring Framework 5.0.1.RELEASE都值得你投入时间和精力去学习和探索。
自动配置是Spring Boot的一大亮点,它根据项目中的依赖自动设置Spring容器的配置,极大地减少了手动配置的工作量。起步依赖则通过"starters" pom文件帮助开发者快速引入所需的依赖,例如"data-jpa" starter用于JPA...
总之,Spring DM与OSGi的整合是Java企业级应用开发中的高级主题,它允许开发者构建模块化、可维护和可扩展的应用程序。通过使用`lib`压缩包中的jar文件,开发者可以搭建一个支持Spring DM的OSGi环境,实现更高效、...
- **Core Container**:核心容器包括Beans和Context模块,是整个Spring框架的基础。Beans模块实现了DI,而Context模块则提供了更高级的上下文,可以管理Bean并与其他服务进行交互。 - **Data Access/Integration**...
- **模块化设计**:Spring Framework 4.0.3.RELEASE的核心组件包括Core Container(核心容器)、Data Access/Integration(数据访问/集成)、Web(Web层)、AOP(面向切面编程)、Instruments(工具)和Messaging...
1. **模块化设计**:Spring Framework 分为多个模块,包括核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、AOP(面向切面编程)、工具(Tools)以及消息(Messaging)。这种模块化设计...
通过对Spring 4.3.2.RELEASE源码的深入研究,我们可以了解其设计理念,学习到如何优雅地管理依赖、实现面向切面编程,以及如何利用Spring构建高效、健壮的Web应用。同时,源码阅读也能帮助我们理解Spring如何与其他...
Spring源码是学习框架设计思想和Java高级技术的好资料。通过阅读源码,可以深入了解依赖注入、AOP、事件驱动等方面的实现。 7. **文档**: 完整的文档包括用户指南、参考手册和API文档,有助于快速上手和深入理解...
- **spring-framework-5.1.13.RELEASE-schema.zip**:这个文件包含Spring框架的XML配置文件的架构定义,这对于理解如何通过XML配置来驱动Spring容器的行为至关重要。 4. **关键模块解析** - **Core Container**...
- **学习 Spring Boot 的特性**: 包括自动配置、健康检查、指标监控等。 - **迁移到生产环境**: 如何优化应用以适应生产环境。 - **高级主题**: 包括安全性、性能调优、云原生支持等。 #### 八、结论与后续阅读 - ...
在本项目中,Spring作为容器,管理着所有Bean的生命周期,通过XML配置文件或Java配置类来定义Bean的创建、初始化、销毁等过程。同时,Spring MVC作为其Web层组件,处理HTTP请求,实现业务逻辑和视图的解耦。 二、...
Spring MVC通过DispatcherServlet进行请求分发,并支持多种视图技术如JSP、Thymeleaf等,同时具备数据绑定、异常处理等高级特性。 接着,"beans"子目录代表了Spring的IoC(Inversion of Control,控制反转)容器,...
例如,`HadoopConfigUtils`类负责解析和加载Hadoop的配置文件,`HadoopConfigurationBeanFactoryPostProcessor`则用于在Spring容器启动时处理Hadoop配置。 2. **数据访问接口**:Spring Data Hadoop定义了一系列的...