spring技术内幕笔记1

spring的设计目标(为什么要用spring)

如果我们要简要地描述Spring的设计目标,可以这么说,Spring为开发者提供的是一个一站式的轻量级应用开发框架(平台)。作为平台,Spring抽象了我们在许多应用开发中遇到的共性问题;同时,作为一个轻量级的应用开发框架,Spring和传统的J2EE开发相比,有其自身的特点。通过这些自身的特点, Spring充分体现了它的设计理念:在Java EE的应用开发中,支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方法。

比如,在Java EE应用开发中,传统的EJB开发需要依赖按照J2EE规范实现的J2EE应用服务器。我们的应用在设计,特别是实现时,往往需要遵循一系列的接口标准,才能够在应用服务器的环境中得到测试和部署。这种开发方式,使应用在可测试性和部署上都会受到一些影响。Spring的设计理念采用了相对EJB而言的轻量级开发思想,即使用POJO的开发方式,只需要使用简单的Java对象或者JavaBean就能进行Java EE开发,这样开发的入门、测试、应用部署都得到了简化。

另一方面,在我们的应用开发中,往往会涉及复杂的对象耦合关系,如果在Java代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便。而如果使用Spring作为应用开发平台,通过使用Spring的IoC容器,可以对这些耦合关系(对Java代码而言)实现一个文本化、外部化的工作,也就是说,通过一个或几个XML文件,我们就可以方便地对应用对象的耦合关系进行浏览、修改和维护,这样,可以在很大程度上简化应用开发。同时,通过IoC容器实现的依赖反转,把依赖关系的管理从Java对象中解放出来,交给了IoC容器(或者说是Spring框架)来完成,从而完成了对象之间的关系解耦: 原来的对象-对象的关系,转化为对象-IoC容器-对象的关系,通过这种对象-IoC容器-对象的关系,更体现出IoC容器对应用的平台作用。

从原文,提炼3点:
1、一站式的轻量级应用开发框
2、作为平台,抽象了应用开发共性问题
3、支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方法

个人理解
一站式:围绕spring核心的一个生态系统,比如springMVC、cloud、data等等
轻量:从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类
共性问题:即完全解耦类之间的依赖关系
面向接口:如下xml片段
<beans default-autowire="byName">
<bean id="Test" class="DemoSpring.Test">
<property name="person" ref="pdao"/>
</bean>
<bean id="pdao" class="DemoSpring.Girl"></bean>
</beans>
DemoSpring依赖的是person接口,ref则指向了具体的实现类DemoSpring.Girl,妥妥的面向接口

以上是spring的设计目标,至于为什么要用spring而不是其他的IOC容器,就拿Google大牛开发的Guice作为比较。

Guice其优势在于: br/>1、速度快,号称比spring快100倍。
2、无外部配置(如需要使用外部可以可以选用Guice的扩展包),完全基于annotation特性,支持重构,代码静态检查。
3、简单,快速,基本没有学习成本。
和spring区别,详见https://www.cnblogs.com/huapox/p/3516382.html
Guice优点是效率高,缺点是代码侵入式(@inject直接侵入代码,耦合到类层面),与其他框架集成没有spring好。
所以Guice更适合与嵌入式或者高性能但项目简单方案,如OSGI容器,spring更适合大型项目组织。
现在是企业级项目中,哪个是简单的项目呢?

spring技术内幕笔记1

原文地址:http://blog.51cto.com/13670455/2090943

时间: 2024-10-13 00:29:53

spring技术内幕笔记1的相关文章

《spring技术内幕》读书笔记——什么是POJO模式

今天在看<spring技术内幕>,第一章中多次提到了使用POJO来完成开发,就百度了一下,在此保留 1.     什么是POJO POJO的名称有多种,pure old java object .plain ordinary java object 等. 按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它. POJO的内在含义是指那些没有从任何类继承.也没有实现任何接口,更没有

SQL Server技术内幕笔记合集

SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnblogs.com/lyhabc/articles/3914213.html Microsoft SQL Server 2005技术内幕:T-SQL查询笔记http://www.cnblogs.com/lyhabc/articles/3912608.html Microsoft SQL Server 2

深入探索spring技术内幕(二): 剖析spring管理Bean的原理与配置

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

深入探索spring技术内幕(六): JDK动态代理和cglib生成代理

[ JDK生成代理 ] JDK中给我们提供了一个Proxy类可以动态的给我们生成代理. 假定我们要做一个权限管理系统, 需要控制用户对某一个方法的访问. 如果user为null, 那么不让用户访问save方法. ① 接口类: PersonService public interface PersonService { public void save(); } ② 实现类: PersonServiceImpl public class PersonServiceImpl implements P

深入探索spring技术内幕(四): 剖析@Resource注解实现原理与注解注入

一.@Resource注解原理 @Resource可以标注在字段或属性的setter方法上 1.  如果指定了name属性, 那么就按name属性的名称装配; 2. 如果没有指定name属性, 那就按照默认的名称查找依赖对象; 3. 如果按默认名称查找不到依赖对象, 那么@Resource注解就会回退到按类型装配; ① 先写一个自己的@MyResource: import java.lang.annotation.Retention; import java.lang.annotation.Re

深入探索spring技术内幕(一): spring概述

一.Spring是什么? Spring是一个开源的控制反转 ( IoC ) 和面向切面 ( AOP ) 的容器框架, 它的主要目的是简化企业开发. 二.控制反转(IoC) 控制反转: 所谓的控制反转就是应用本身不负责依赖对象的创建及维护, 依赖对象的创建及维护是由外部容器负责的. 这样控制权就由应用转移到了外部容器, 控制权的转移就是所谓的反转. public class PersonServiceBean { // 自己new一个对象 private PersonDao personDao =

深入探索spring技术内幕(八): Spring +JDBC组合开发和事务控制

一. 配置数据源 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> <property name="

深入探索spring技术内幕(七): 配置Spring AOP面向切面编程

一. AOP一些概念 Aspect( 切面 ): 指横切性关注点的抽象即为切面, 它与类相似, 只是两者的关注点不一样, 类是对物体特征的抽象, 而切面横切性关注点的抽象. joinpoint( 连接点 ): 指那些被拦截到的点. 在spring中, 这些点指的是方法, 因为spring只支持方法类型的连接点, 实际上joinpoint还可以是field或类构造器) Pointcut( 切入点 ): 指我们要对那些joinpoint进行拦截的定义. Advice( 通知 ): 指拦截到joinp

SPRING技术内幕,Spring源码深度解析

 SPRING技术内幕,Spring源码深度解析 SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)[带书签].pdf: http://www.t00y.com/file/78131650 Spring源码深度解析 [郝佳编著] sample.pdf: http://www.t00y.com/file/78131634 [jingshuishenliu.400gb.com]Spring Data.pdf: http://www.t00y.com/file/78256084 [