文章目录
1. spring思想
spring思想 | 应用场景(特点) | 一句话归纳 |
---|---|---|
AOP | 1.Aspect Oriented Programming(面向切面编程) 2.找出多个类中有一定规律的代码,开发时拆开,运行时合并。 2.面向切面编程即面向规则编程 | 解耦,专人做专事 |
OOP | 1.Object Oriented Programming 2.归纳总结生活中的一切事物 | 封装,继承,多态,(抽象) |
BOP | 1.Bean Oriented Programming 2.面向bean(普通java类)的设计程序 | 一切从bean开始 |
IOC | 1.Inversion of Control 2.将new对象的动作交给spring管理,并由Spring保存已创建的对象 | 转交控制权(控制权反转) |
DI/DL | 1.Dependency Injection(依赖注入)/Dependency Lookup(依赖查找) 2.依赖注入,依赖查找,sping不仅保存自己创造的对象,而且保存对象和对象之间的关系 3.注入及赋值,主要有三种方式:构造方法,set方法,直接赋值。 | 先理清关心在赋值 |
设计模式 | 应用场景 | 一句话总结 |
---|---|---|
代理模式 Proxy | 1.两个参与角色:执行者(代理人),被代理人 2.对于被代理人来说,事情一定要做,但是自己不想做或者没有时间做(不能自己去做),找代理做 3.代理人必须获取别代理人的资料(持有被代理人的引用) | 办事要求人,找代理 |
工厂模式 Factory | 1.对调用者隐藏复杂的逻辑处理过程,调用者者关心执行结果 2.工厂要对结果负责,保证生产出符合规则的产品 | 只对结果负责,不要三无产品 , 关心结果 |
单例模式 Singleton | 1.保证从系统开始到系统终止,全过程只会产生一个实例 2.当我们在应用中遇到功能性冲突的时候,就需要使用单例模式 | 保证独一无二 |
委派模式 Delegate | 1.两个角色参与,委托人和被委托人 2.委托人和被委托人处于一个平等的地位(实现同一个接口) 3.委托人持有被委托人的引用 不关心过程,只关心结果 | 干活时你的(普通员工) 功劳是我的(项目经理) |
策略模式 Strategy | 1.执行最终结果一样2.执行过程和执行逻辑不一样 | 我行我素,达到目的就行 |
原型模式 Prototype | 1.首先有一个原型 2.数据内容相同,但对象实例不同(完全不同的内存地址) | 拔一个猴毛,吹出千万个(克隆) |
模板模式 Template | 1.执行流程固定,但中间有些步骤有细微差别 2.课实现批量生产 | 流程标准化,材料自己加 |
2. spring系统架构
组成spring框架的每个模块集合或者模块都可以单独存在,也可以一个或者多个模块联合实现。每个模块的组成和功能如下:
2.1. 核心容器
核心容器:由spring-Beans、spring-Core、spring-Context、spring-SpEL(Spring Expression Language)四个模块组成。
core和beans模块是spring框架的核心模块,包括了IOC(控制反转)和Dependency Injection(依赖注入)。BeanFactory接口是spring框架中的核心接口。是工厂模式的具体实现。BeanFactory使用控制反转对应用程序的配置和依赖性规范与实际应用程序代码进行了分离。但BeanFactory容器实例化后不会自动实例化bean,只有当bean被使用时,benaFactory容器才会对该Bean进行实例化与依赖关系的装配。
spring-contest模块构架于核心模块之上,他扩展了BeanFactory,为她添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等, Applicat ionContext是该模块的核心接口,她是BeanFactory的超类,与BeanFactory不同,Applicat ionContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。
spring-expression模块是统一表达式语言(unified EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于Spring产品的需求而设计,他可以非常方便地同Spring IoC进行交互。
2.2. AOP和设备支持
AOP和设备支持:由spring-aop、spring aspects和spring-instrumentation 3个模块组成。
- spring-aop 是Spring的另-一个核心模块,是Aop主要的实现模块。作为继00P后,对程序员影响最大的编程思想之一,Aop 极大地开拓了人们对于编程的思路。在Spring中,他是以JVM的动态代理技术为基础,然后设计出了一系列的Aop横切实现,比如前置通知、返回通知、异常通知等,同时,Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。
- spring aspects模块集成自AspectJ框架,主要是为Spring Aop 提共多种Aop实现方法。
- spring-instrumentation模块是基于JAVA SE中的”java lang. instrument”进行设计的,应该算是Aop的一个支援模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变-一个类的功能,实现Aop的功能。在分类里,我把他分在了Aop 模块下,在Spring官方文档里对这个地方也有点含糊不清,这里是纯个人观点。
2.3. 数据访问及集成
数据访问及集成:由spring- idbc、spring-tx、 spr ing-orm、spring-ims 和spring-oxm 5个模块组成。
- spring-idbc.模块是Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC。主要是提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类是JdbcTemplate~ SimpleJdbcTemplate 以及NamedParame ter Jdbc Template。
- spring-tx模块是Spring JDBC事务控制实现模块。使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层;但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。其实,事务是以业务逻辑为基础的;一个完整的业务应该对应业务层里的一个方法;如果业务操作失败,则整个事务回滚,所以,事务控制是绝对应该放在业务层的;但是,持久层的设计则应该遵循一个很重要的原则:保证操作的原子性,即持久层里的每个方法都应该是不可以分割的。所以,在使用Spring JDBC 事务控制时,应该注意其特殊性。
- spring-orm模块是ORM框架支持模块,主要集成Hibernate, Java Persistence API (JPA)和JavaData 0bjects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略。
- spring-ims模块(Java Messaging Service) 能够发送和接受信息,自Spring Framework 4.1 以后,他还提供了对spring- messaging模块的支撑。
- spring-oxm模块主要提供一个抽象层以支撑0XM (OXM是0bject-to-XML-Mapping的缩写,它是个0/M mapper,将java对象映射成XML数据,或者将XML数据映射成java对象),例如: JAXB, Castor,XMLBeans, JiBX和XStream等。
2.4.web
Web:由spring- web、spring-webmvc、 spring-websocket 和spring-webmvc-portlet 4个模块组成。
- spring web模块为Spring提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IoC容器,也包含一些与Web相关的支持。
- spring-webmvc模块众所周知是-一个的Web-Servlet模块,实现了Spring MVC(model -view controller)的Web应用。
- spring-websocket模块主要是与Web前端的全双工通讯的协议。( 资料缺乏,这是个人理解)
4.spring-webmyc-portlet模块是知名的Web-Portlets模块( Portlets在Web门户上管理和显示的可插拔的用户界面组件。Portlet产生可以聚合到门户页面中的标记语言代码的片段,如HTML, XML等),主要是为SpringMVC提供Portlets组件支持。
2.5.报文发送
报文发送:即spring -messaging模块。
spring messaging是Spring4新加入的一个模块,主要职责是为Spring框架集成一些 基础的报文传送应用。
2.6. test
Test:即spring test模块。
spring-test模块主要为测试提供支持的,毕竟在不需要发布(程序)到你的应用服务器或者连接到其他企业设施的情况下能够执行-些集成测试或者其他测试对于任何企业都是非常重要的。
3. 依赖关系
如果你想加入spring源码的学习,笔者的建议是从spring -core入手,其次是spring-beans和spring-aop, 随后是spring-context, 再其次是spring-tx和spring-orm, 最后是spring – web和其他部分。
4. spring源码下载
第一步: https://github.com/spring-projects/spring-framework/releases/tag/v3.2.6.RELEASE
第二步:下载gradle
http://downloads. gradle. org/ distributions/gradle-1.6-bin. zip
第三步:解压,配置GRADLE_ HOME和Path
第四步:验证gradle -v,环境变量是否正确
第五步:构建eclipse项目gradle eclipse -x :eclipse
第六步:引入到Eclipse环境中