1 spring容器的功能:
是管理bean,和维护bean之间的关系。
我一般把ApplicationContext理解为一个重HashMap。
2 spring的运行原理:
假设脑海中已经存在了这样的一个spring配置文件,包含了很多bean。
配置文件里包含这样两个bean
<bean id="userService" class="com.cn.UserService">
<property name="userName" value="张三"/>
<property name="leadService" ref="com.cn.LeadService"/>
</bean>
<bean id="leadService" ref="com.cn.LeadService">
<property name="leadName" value="李四"/>
</bean>
在内存中可以这么理解:
内存 ApplicationContext容器
id value
userService (地址:0x123) com.cn.UserService(userName,leadService)
leadService (地址:0x234) com.cn.LeadService(leadName)
容器可以通过id获取对象,对象之间也可以相互引用,是不是和Map类似呢。
3 可以通过反射和dom4j理解下内部实现机制
userService=Class.forName("com.cn.UserService");
4 现在来理解IOC和DI应该就变得容易了
IOC 即inversion of control 控制反转,即将控制的权利转移给了容器,由容器去负责管理bean和bean之间的关系。
DI 依赖注入,看一下上面的bean的配置,会发现在容器注入的bean,bean里注入的属性和引用其它的bean,都交给了容器去管理。
有人说DI和IOC其实说的是一回事,只是不同的叫法。我有自己的理解。
IOC是是代码中控制bean对象的创建到容器管理对象生成的转移。
DI是bean之间的注入和引用关系的维护。
题外:
像Action一般都定义为prototype,因为Action会封装实例变量,即有状态对象,非线程安全,而service,dao封装的变量是无状态的,线程安全,定义为singleton。(有兴趣的可以了解一下有状态和无状态对象)
有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 (action包含User这样的实例对象),可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。
无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象 .不能保存数据,是不变类,是线程安全的,(虽然service可以引用dao,但是dao都是没有状态信息的,也就相当于不变类)
另外,给正在学习spring框架的朋友一点建议,框架底层运用的技术基本上都是反射,HashMap。所以对反射和HashMap等技术先有深刻的理解,对学习框架原理会更有帮助。
分享到:
相关推荐
**Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...
Spring Cloud 运行原理 Spring Cloud 是基于 Spring Boot 的高度自动化的应用开发框架,将各类业界比较知名的、得到过实践反馈的开元服务治理相关的技术框架进行优化整合的框架,是一种开发方式的优化和组合,是一...
这个博客清晰的讲述了mvc和spring mvc 的运行原理,大家可以参考一下,有啥不足之处请多多指教,本人第一次发博客,希望通过这个平台来与IT的朋友们一起交流学习。
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
本书是国内唯一一本系统分析Spring源代码的著作,也是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔,Java开发者社区和Spring开发者社区联袂推荐。本书第1版不仅在内容上获得了读者的广泛...
- **依赖注入**:依赖注入是Spring框架的核心功能之一,通过构造函数注入、setter方法注入或字段注入等方式,实现了组件之间的解耦。 - **面向切面编程**:Spring支持在运行时动态地添加行为到程序中,如日志记录、...
在Spring框架中,注解是实现依赖注入和配置的核心机制之一。本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一...
- **动态代理**:Spring默认采用JDK的动态代理或者CGLIB库,能够在运行时动态创建代理对象,无需为每个目标类单独创建代理。动态代理适用于任何实现了接口的目标对象。 在事务管理中,Spring通常使用AOP动态代理...
AOP通过代理技术,在运行时动态地将这些关注点插入到应用程序的特定位置,即在方法调用的前后执行特定的代码。这样,我们可以在不修改原有业务逻辑的情况下,实现对代码的横向扩展,提高代码的复用性和模块化程度。 ...
《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring开发者社区一致强烈推荐。国内第一本基于Spring3.0的著作,从...
Spring 框架是Java开发中最广泛使用的轻量级框架之一,它以其强大的功能和灵活的设计赢得了广大开发者的心。本文将深入探讨Spring的核心特点——控制反转(IoC)和面向方面编程(AOP),以及它们在Spring框架中的...
- **动态代理**:Spring默认使用JDK动态代理或CGLIB实现,无需预先创建代理类,能在运行时根据接口动态生成代理对象。动态代理的应用场景更为广泛,只要被代理对象实现了接口,就可以使用。 3. **Spring MVC**: ...
Spring框架是Java开发中最常用的轻量级框架之一,它的运行机制源码剖析是理解其工作原理的关键。在本文中,我们将深入探讨Spring的核心组件、依赖注入(DI)以及AOP(面向切面编程)的实现。 首先,让我们从Spring...
在企业级应用开发中,Spring以其强大的功能、高度的灵活性和广泛的社区支持,成为了Java开发者的首选框架之一。 一、Spring框架概述 Spring是一个开源的企业级Java应用框架,其核心特性是依赖注入(Dependency ...
Spring Boot实战与原理分析视频课程包含14-18,本视频教程为网络整理,如有侵权,请联系删除。谢谢 Spring Boot实战与原理分析视频课程 课程目录: 1 Spring Boot概述与课程概要介绍20:33 2 Spring4 快速入门59:56...
本文将对 Spring Cloud Config/Bus 的源码进行解读,涵盖 Server 端、Client 端、Bus 的运行原理等方面的内容。 一、初始化 在 Spring Cloud Config/Bus 中,初始化的过程主要是围绕 ...