框架学习前言html
这个模块是面向Spring的,Spring的学习我是这么想的:java
一、简单介绍Spring,主要是从网上借鉴一些重点git
二、尽可能说明清楚Spring的使用方法以及细节点github
三、尽可能以本身的理解讲清楚Spring中的一些源代码spring
Spring是什么apache
Spring是一款为了解决企业应用开发的复杂性而建立的轻量级Java框架。框架的主要优点之一就是其分层架构,分层架构容许使用者选择哪个组件,同时为J2EE应用程序开发提供集成的框架。从简单性、可测试性和松耦合的角度而言,任何Java应用均可以从Spring中受益,Spring的核心是控制反转IOC和面向切面AOP。编程
Spring的特征设计模式
一、轻量架构
从大小与开销两方面而言Spring都是轻量的。完整的Spring框架能够在一个大小只有1M多的JAR文件里发布,而且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型的,Spring应用中的对象不依赖于Spring的特定类。app
二、控制反转
Spring经过一种称做控制反转IOC的技术促进了低耦合。当应用了IOC,一个对象依赖的其余对象会经过被动的方式传递进来,而不是这个对象本身建立或者查找依赖对象。
三、面向切面
Spring提供了面向切面编程的丰富支持,容许经过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用程序只实现它们应该作的----完成业务逻辑,仅此而已,它们并不负责(甚至意识不到)其它的系统级关注点,例如日志或事物支持。
四、容器
Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你能够配置你的每一个bean如何被建立----基于一个可配置原型,你的bean能够建立一个单独的实例或者每次须要时都生成一个新的实例----以及它们是如何相互关联的。
五、框架
Spring能够将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型的是在一个XML文件里。Spring也提供了不少基础功能(事务管理、持久化框架集成等),将应用逻辑的开发留给开发者。
全部Spring的这些特征使得开发者可以编写更干净、更可管理、更易于测试的代码,它们也为Spring中的各类模块提供了基础支持。
Spring的特色
一、方便解耦,简化开发
经过Spring提供的IOC容器,咱们能够将对象之间的依赖关系交由Spring进行控制,避免硬编码所形成的过分耦合。有了Spring,用户没必要再为单实例模式类、属性文件解析等这些很底层的需求编写代码,能够更专一于上层的应用。
二、AOP编程的支持
经过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能能够经过AOP轻松应付。
三、声明式事物的支持
在Spring中,咱们能够从单调烦闷的事务管理代码中解脱出来,经过声明式灵活地进行事物的管理,提升开发效率和质量。
四、方便集成各类优秀框架
Spring不排斥各类优秀的开源框架,相反,Spring能够下降各类框架的使用难度,Spring提供了对各类优秀框架如Structs、Hibernate、Hessian、Quartz等的直接支持。
五、下降Java EE API的使用难度
Spring对不少难用的Java EE API(如JDBC、JavaMail、RMI等)提供了一个薄薄的封装层,经过Spring的简易封装,这些Java EE API的使用难度大为下降
六、Java源码是经典学习范例
Spring的源码设计精妙、结构清晰、独具匠心,到处体现着对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例,若是想在短期内迅速提升本身的Java技术水平和应用开发水平,学习和研究Spring的源码将使你获益匪浅。
Spring下载
Spring相关信息能够去Spring官网查看,不过都是全英文版本的。
Spring目前的最新版本是4.2.2,点击连接下载,解压后应该是这样的:
介绍一下每一个文件夹:
一、docs下是Spring相关资料,包括一个官方的英文版的资料《spring-framework-reference.pdf》以及网页版本的Spring API,上面有全部的Spring类与方法相关信息,就和JDK API同样
二、libs下包括了Spring全部jar包,注意一下"*.javadoc.jar"和"*.sources.jar"结尾的都是每一个模块Spring提供的一些辅助文档而已,并非真正要用的jar包的内容
三、schema里面是Spring每一个组件、每一个版本的.xsd文件,用来设置.xml文件自动提示用的
Spring环境搭建以及.xml文件自动提示设置
为了后面的学习,这里讲解一下如何搭建一个Spring框架以及如何为.xml文件设置Spring标签及相应属性的自动提示:
一、右键工程->Build Path->Configure Build Path...,选择Add External JARs...,导入全部libs下的jar包(若是只用bean工厂的功能其实不所有导入也行)
二、咱们知道,Spring的使用是经过写配置文件的,因此右键src->new->File,随便命名,以xml结尾便可
三、xml文件里面写入,这是最基础的模板,日后全部功能都在这个模板上扩展:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> </beans>
四、点击Window->Preferences->MyEclipse->Files and Editors->XML->XML Catalog->Add->File System...,选择解压后的目录Schema文件夹,beans目录下的spring-beans-4.2.xsd,其实选任何一个版本的.xsd均可以,只要和你的Spring的.xml文件里面那个版本号对应就能够了
五、Key Type选择"Schema Location",key填"http://www.springframework.org/schema/beans/spring-beans-4.2.xsd",也就是.xml文件里面的那个路径
六、点击OK便可,以后配置Spring别的功能好比aop、context、jdbc什么的XML提示也能够用相似的方法,.xml里面配置一个地址,XML Catalog里面添加一个XML Catalog Entry
Spring日志系统搭建
Spring采用Apache common_logging,并结合Apache log4j做为日志输出组件,为了在调试过程当中能够观察到Spring的日志输出,请先下载common_logging和log4j两个jar包,不知道最新的两个jar包是什么版本的,我用的是比较老的,之前就下载的:
下载了以后请确保你的CLASSPATH下有这两个jar包。有了这两个jar包以后,右键src,新建一个"log4j.properties"文件,配置以下:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n
这样,在使用Spring的过程当中,你就能够看到Spring的日志输出了。
Spring源码下载及导入MyEclipse
既然咱们的要学习源代码,那势必要获取Spring的源码。Spring的源码是经过GitHub进行管理的,下载Spring源码并导入MyEclipse须要两样工具:
一、GitHub,点我
二、Gradle,点我,注意下载安装完Gradle要建立GRADLE_HOME系统变量,并将这个系统变量加入到path中,就和JDK同样,这个不会的能够上网查一下,安装完进入cmd,输入命令"gradle -version",打印出gradle的版本信息就表示gradle能够用了
GitHub和Gradle都安装完毕以后,分两步:
一、使用GitHub下载源码
首先下载安装这两个工具,OK以后,GitHub的bin目录下双击"tclsh85.exe",就跟使用cmd同样的,先随便找一个想要下载到的目录,使用"git clone git://github.com/SpringSource/Spring-framwwork.git"下载Spring源代码,如图:
下载完毕应该是:
二、当前下载的源码并不能直接导入MyEclipse中,咱们还须要将源码转换为MyEclipse认识的形式,因此这时候就要用Gradle了。cmd进入命令窗口,切换至下载Spring源码所在的目录,咱们想要把哪一个模块的源码转成MyEclipse的就操做哪一个文件夹,具体方式为:
转换完毕应该是:
此时咱们看一下文件夹下的spring-beans目录:
这就是MyEclipse认识的形式,直接Import进入MyEclipse,固然这个时候项目上有红色感叹号,表示工程有错,错误在:
用同样的方式把spring-core转一下导入源码工程就行了。另外,spring-cglib-repack-3.1.jar和spring-objenesis-repack-2.2.jar报错的问题,上网找一下这两个jar包下载并导入就行了,我是在CSDN上下载的。