详解Spring框架的设计理念与设计模式
多图详解Spring框架的设计理念与设计模式

Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道。
本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念。
Rod Johson在2002年编著的《Expert one to one J2EE design and development》一书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。
以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。
Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。
同年他又推出了一部堪称经典的力作《Expert one-to-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。
在该书中,作者根据自己多年丰富的实践经验,对EJB 的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。
至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。
传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。
Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。
可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。
然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。
多图详解Spring框架的设计理念与设计模式(3)

Bean的定义主要有BeanDefinition描述,如下图说明了这些类的层次关系:图5.Bean定义的类层次关系图Bean的定义就是完整的描述了在Spring的配置文件中你定义的节点中所有的信息,包括各种子节点。
当Spring成功解析你定义的一个节点后,在Spring的内部他就被转化成BeanDefinition对象。
以后所有的操作都是对这个对象完成的。
Bean的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。
Bean的解析主要就是对Spring配置文件的解析。
这个解析过程主要通过下图中的类完成:图6.Bean的解析类当然还有具体对tag的解析这里并没有列出。
Context组件Context在Spring的org.springframework.context包下,前面已经讲解了Context组件在Spring中的作用,他实际上就是给Spring提供一个运行时的环境,用以保存各个对象的状态。
下面看一下这个环境是如何构建的。
ApplicationContext是Context的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了五个接口,这五个接口主要是扩展了Context的功能。
下面是Context的类结构图:图7.Context相关的类结构图从上图中可以看出ApplicationContext继承了BeanFactory,这也说明了Spring容器中运行的主体对象是Bean,另外ApplicationContext继承了ResourceLoader接口,使得ApplicationContext可以访问到任何外部资源,这将在Core中详细说明。
ApplicationContext的子类主要包含两个方面:ConfigurableApplicationContext表示该Context是可修改的,也就是在构建Context中用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的Context,即AbstractRefreshableApplicationContext类。
Spring技术内幕:深入解析Spring架构与设计原理

---------------------------------------------------------------最新资料推荐------------------------------------------------------Spring技术内幕:深入解析Spring架构与设计原理Spring 技术内幕:深入解析 Spring 架构与设计原理 Spring 技术内幕深入解析 Spring 架构与设计原理(一)引子缘起已经很久没有写帖子了,现在总算是有点时间写些东西,也算是对自己的一个记录吧。
刚刚完成了一个软件产品,从概念到运营都弄了一下,正在推广当中,虽然还没有能够达到盈亏平衡,但是这个过程,对自己也算是一种历练。
先不管结果如何,好呆走过这么一遭了。
我打算用这个帖子,把自己在这个过程中的一些心得,特别是对 Spring 新的理解,记录下来。
使用这个帖子的标题,持续下来。
简单来说,自己的软件产品是一个基于互联网的 SaaS 协同软件平台, 操作简单,支持流程定义,管理和多种客户端 -像短信, MSN,智能手机什么的(我这里就不多做什么广告了),也有一个企业版的版本,使用的技术框架是 Hibernate + Spring + Wicket,下面是 Linux 和 MySQL,还有云计算的平台的使用,以支持其扩展性,虽然现在还没有可扩展性的需求,但似乎不难从SaaS 上,就会想到云计算, 其实,它们真的是天生的一对!1 / 3关于云计算,自己对这个技术很感兴趣,觉得和开源软件的结合,是很有意思的,因为它们都有基于服务的基因,在云计算平台的使用上,也有一些初步的实践。
云计算是一个很有意思的话题,但在这里主要是想谈 Spring,所以对云计算,这里就先不多说了,但非常欢迎有兴趣的朋友和一起另外找地方讨论!回到正题,在我自己的产品中,其中除了Wicket 和云计算外,其他都是大家非常熟知的了,像Hibernate, Spring, MySQL 什么的。
spring框架的工作原理

spring框架的工作原理Spring框架的工作原理主要分为以下几个方面:1. 控制反转(IoC): Spring采用了控制反转的设计模式,通过IoC 容器来管理对象的创建和依赖关系的注入。
在传统的开发中,类与类之间的依赖关系通常由类自己维护,而在Spring框架中,依赖关系由Spring容器来管理,开发人员只需要定义好依赖关系,由容器来完成对象的创建和组装。
这种方式可以降低组件之间的耦合度,提高系统的灵活性和可维护性。
2. 面向切面编程(AOP): Spring框架还支持面向切面编程,通过AOP可以在不修改原有业务逻辑的情况下,插入和改变系统的部分功能。
例如,可以使用AOP在事务开始之前开启事务,在事务提交之后关闭事务。
Spring使用AOP代理来实现,它可以基于代理模式或者字节码生成技术实现。
3. 基于注解的开发: Spring框架支持基于注解的开发方式,通过在类、方法或者字段上添加特定的注解,Spring框架可以根据注解的配置信息自动完成对象的创建和属性的注入。
使用注解可以简化配置,减少开发人员的工作量。
4. 模块化设计: Spring框架采用了模块化的设计思想,根据功能的不同划分了不同的模块,例如Spring Core、Spring MVC、Spring Security等。
每个模块都有特定的功能和用途,可以根据需要选择性地引入和使用。
5. 与其他框架的集成: Spring框架可以与其他流行的框架进行集成,例如Hibernate、MyBatis、Struts等。
通过与这些框架的集成,可以更加方便地使用它们的功能,提高开发效率。
总的来说,Spring框架的工作原理是基于控制反转和面向切面编程的,通过IoC容器管理对象的创建和依赖关系注入,同时支持基于注解的开发方式和模块化设计,方便与其他框架集成。
Spring技术内幕——深入解析Spring架构与设计原理

Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理IOC的基础下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分;虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深入理解Spring平台,却是至关重要的;因为,它们同时也是Spring其他模块实现的基础。
从Spring要做到的目标,也就是从简化Java EE开发的出发点来看,简单的来说,它是通过对POJO开发的支持,来具体实现的;具体的说,Spring通过为应用开发提供基于POJO的开发模式,把应用开发和复杂的Java EE服务,实现解耦,并通过提高单元测试的覆盖率,从而有效的提高整个应用的开发质量。
这样一来,实际上,就需要把为POJO提供支持的,各种Java EE服务支持抽象到应用平台中去,去封装起来;而这种封装功能的实现,在Spring中,就是由IOC容器以及AOP来具体提供的,这两个模块,在很大程度上,体现了Spring作为应用开发平台的核心价值。
它们的实现,是Rod.Johnson在他的另一本著作《Expert One-on-One J2EE Development without EJB》中,所提到Without EJB设计思想的体现;同时也深刻的体现了Spring背后的设计理念。
从更深一点的技术层面上来看,因为Spring是一个基于Java语言的应用平台,如果我们能够对Java计算模型,比如像JVM虚拟机实现技术的基本原理有一些了解,会让我们对Spring实现的理解,更加的深入,这些JVM虚拟机的特性使用,包括像反射机制,代理类,字节码技术等等。
它们都是在Spring实现中,涉及到的一些Java计算环境的底层技术;尽管对应用开发人员来说,可能不会直接去涉及这些JVM虚拟机底层实现的工作,但是了解这些背景知识,或多或少,对我们了解整个Spring平台的应用背景有很大的帮助;打个比方来说,就像我们在大学中,学习的那些关于计算机组织和系统方面的基本知识,比如像数字电路,计算机组成原理,汇编语言,操作系统等等这些基本课程的学习。
深入解析spring中用到的九种设计模式

深⼊解析spring中⽤到的九种设计模式转载请注明出处,⽂章⾸发于:设计模式作为⼯作学习中的枕边书,却时常处于勤说不⽤的尴尬境地,也不是我们时常忘记,只是⼀直没有记忆。
今天,螃蟹在IT学习者⽹站就设计模式的内在价值做⼀番探讨,并以spring为例进⾏讲解,只有领略了其设计的思想理念,才能在⼯作学习中运⽤到“⽆形”。
Spring作为业界的经典框架,⽆论是在架构设计⽅⾯,还是在代码编写⽅⾯,都堪称⾏内典范。
好了,话不多说,开始今天的内容。
spring中常⽤的设计模式达到九种,我们举例说明:第⼀种:简单⼯⼚⼜叫做静态⼯⼚⽅法(StaticFactory Method)模式,但不属于23种GOF设计模式之⼀。
简单⼯⼚模式的实质是由⼀个⼯⼚类根据传⼊的参数,动态决定应该创建哪⼀个产品类。
spring中的BeanFactory就是简单⼯⼚模式的体现,根据传⼊⼀个唯⼀的标识来获得bean对象,但是否是在传⼊参数后创建还是传⼊参数前创建这个要根据具体情况来定。
如下配置,就是在 HelloItxxz 类中创建⼀个 itxxzBean。
<beans><bean id="singletonBean" class="com.itxxz.HelloItxxz"><constructor-arg><value>Hello! 这是singletonBean!value></constructor-arg></ bean><bean id="itxxzBean" class="com.itxxz.HelloItxxz"singleton="false"><constructor-arg><value>Hello! 这是itxxzBean! value></constructor-arg></bean></beans>第⼆种:⼯⼚⽅法(Factory Method)通常由应⽤程序直接使⽤new创建新的对象,为了将对象的创建和使⽤相分离,采⽤⼯⼚模式,即应⽤程序将对象的创建及初始化职责交给⼯⼚对象。
多图详解Spring框架的设计理念与设计模式

Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道。
本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念。
Rod Johson在2002年编著的《Expert one to one J2EE design and development》一书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。
以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。
Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。
同年他又推出了一部堪称经典的力作《Expert one-to-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。
在该书中,作者根据自己多年丰富的实践经验,对EJB 的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。
至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。
传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。
Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。
可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。
然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。
Spring框架解析

Spring框架解析Spring框架是一种轻量级的开源Java框架,用于构建企业级应用程序。
它提供了一个基于IoC(Inverse of Control,控制反转)和AOP (Aspect-Oriented Programming,面向切面编程)的开发模式,帮助程序员简化应用开发过程,提高代码的可维护性和灵活性。
本文将对Spring框架进行详细解析,包括其核心特性和使用方法。
一、Spring框架的核心特性1. 控制反转(IoC)控制反转是Spring框架的核心特性之一。
它通过将系统中各个组件的配置从代码中分离出来,交由Spring容器管理,从而实现了组件之间的解耦。
通过IoC容器,我们可以通过配置文件或注解来定义和管理各个组件的创建和依赖关系,使得代码更易于理解和维护。
2. 面向切面编程(AOP)AOP是Spring框架的另一个重要特性。
它通过将系统中的功能划分为不同的关注点,将通用的横切关注点(如日志记录、性能统计等)从核心业务逻辑中分离出来,通过切面的方式进行统一管理。
使用AOP,我们可以将重复性的代码抽取出来,提高代码的复用性和可维护性。
3. 模块化Spring框架是一个高度模块化的框架,它由多个独立的模块组成,每个模块都提供了特定的功能。
例如,Spring Core模块提供了IoC和依赖注入的支持,Spring MVC模块提供了Web应用程序开发的支持,Spring Security模块提供了安全认证和授权的功能等。
这种模块化的设计使得开发者可以根据自己的需求选择所需的模块,提高了开发的灵活性。
4. 与其他框架的集成Spring框架可以与其他流行的框架和技术进行集成,如Hibernate、MyBatis、Struts等。
它提供了与这些框架的整合方案,使得开发者可以更方便地使用这些框架的功能,减少了开发工作的重复性和复杂性。
二、Spring框架的使用方法1. 配置文件在使用Spring框架时,我们首先需要编写一个Spring配置文件,通常以`.xml`为后缀。