Spring是分层的Java SE/EE应用一站式的轻量级开源框架,以IoC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming,
切面编程)为内核,提供了展现层Spring MVC,持久层Spring JDBC以及业务层事务管理等一站式的企业级应用技术。此外,还整合了开源世界的众多著名的第第三方框架和类库,逐渐成为使用最多的轻量级Java EE企业应用开源框架。
Spring的好处:
方便解耦,简化开发。通过Spring提供的IoC容器,用户可以将对象之间的依赖关系交给Spring控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单例模式,属性文件解析等这些底层的需求编写代码,可以更专注于 上层的应用。
AOP编程的支持。通过Spring提供的AOP功能,方便进行切面编程,很多不容易用传统OOP实现的功能可以通过AOP轻松应对。
声明式事务的支持。在Spring中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活的进行事务管理,提高开发效率和质量。
方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。在Spring里,测试不再是昂贵的操作,而是随手可做的事情。
方便集成各种优秀框架。Spring提供了对众多优秀开源框架直接或间接的支持。
降低Java EE API的使用难度。Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄层封装,通过Spring的简易封装,这些Java EE API的使用难度大大降低。
整个Spring框架按其所属功能可以划分成5个主要模块。
1.IoC
它将类与类之间的依赖从代码中脱离出来,用配置的方式惊醒依赖关系描述,由IoC容器负责依赖类之间的创建,拼接,管理,获取等工作。BeanFactory接口是Spring框架的核心接口,它实现了容器许多核心的功能。
Context模块构建于核心模块之上,扩展了BeanFactory的功能,添加了il8n国际化,Bean生命周期控制,框架事件体系,资源加载透明化等多项功能。此外,改模块还提供了众多企业级服务的支持,如邮件服务,任务调度,JNDI获取,EJB集成,远程访问等。ApplicationContext是Context模块的核心接口。
表达式语言模块是提供同意表达式语言(Unified EL)的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法,操作数组和集合等。此外,该模块还提供了逻辑表达式运算,变量定义等功能,可以方便地通过表达式串和Spring IoC容器进行交互。
2.AOP
AOP是继OOP之后,对编程涉及思想影响极大的技术之一。AOP是进行横切逻辑编程的思想,它开拓了考虑问题的思路。在AOP模块里,Spring提供了满足AOP Alliance(AOP联盟)的规范实现,还整合了AspectJ这种AOP语言及的框架。在Spring里实现AOP编程有众多选择。Java5.0引入了java.lang.instrument,允许在JVM启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现AOP的功能。
3.数据访问和集成
仍和应用程序的核心问题都是对数据的访问和操作。Spring站在DAO的抽象层面,建立了一套面向DAO层的统一的异常体系,同时将各种数据访问的检查型异常转换成非检查型异常,为整合各种持久层框架提供基础。其次,Spring通过模板化技术对各种数据访问技术进行了薄层封装,将模式化的代码隐藏起来,使数据访问的程序得到大幅简化。这样,Spring就建立棋类和数据形式及访问技术无关的统一的DAO层,借助AOP技术,Spring提供了声明式事务的功能。
4.Web及远程操作
该模块建立在Application Context模块之上,提供了Web应用的各种工具类,如通过Listener或Servlet初始化Spring容器,将Spring容器注册到Web容器之中,该模块还提供了多项面向Web的功能,如透明化文件上传,Velocity,FreeMaker,XSLT的支持。此外,Spring可以整合Strust,WebWork等MVC框架
5.Web及远程访问
Spring自己提供了一个完整的类似于Struts的MVC框架--Spring MVC。当然Spring对Struts,WebWork等MVC框架也提供整合支持。
6.WebSocket
WebSocket提供了一个在Web应用中高效,双向的通信,需要考虑到客户端和服务器之间的高频和低时延消息的交换。
Spring4.0基于Java6.0,全面支持Java8.0。运行Spring4.0必须使用Java6.0以上版本,推荐使用Java8.0及以上版本,如果要编译Spring4.0,则必须使用Java8.0。
全面支持Java8.0
Spring框架本身是由Java8.0编译器编译的,编译时使用的是生成Java 6字节码的编译命令选项,因此可以使用Java6.0,7.0或8.0来运行Spring 4.0的应用。
Java8.0编译器编译过的代码需要在Java8.0或以上的Java虚拟机上运行,由于在Spring框架中大量应用了反射机制和Asm,Cglib等函数库,必须确保这些函数库能理解Java8.0生成的新.class文件。因此,Spring将Asm,Cglib等函数库通过jarjar嵌入Spring框架中,这样就可以同时支持Java6.0,7.0和8.0的字节码而不会产生运行时错误。
Java8.0的Lambda表达式和LocalDate,LocalTime,LocalDateTime,重复注解等新特性都被在Spring4.0中提供相应支持,Java8的java.util.Optional类可以在Spring注入时使用,以表示不一定会被注入的元素,在Spring MVC框架中使用Optional来修饰参数,表示请求中该项参数是可选的。
核心容器的增强
Spring4.0对核心容器进行了增强,支持泛型依赖注入,对CgLib代理不再要求必须有空参构造器。在基于Java的配置里添加了@Description;提供@Conditional注解来实现Bean的条件过滤;提供@Lazy注解解决Bean延时依赖注入;支持Bean被注入List或者Array时可以通过@Order注解或基于Ordered接口进行排序。如果使用Spring的注解支持,则可以使用自定义注解来组合多个注解,方便对外公开特定的属性。
支持Groovy定义Bean,基于Servlet3.0开发,支持WebSocket,测试的增强,提供了对JCache注解的支持,添加了对动态语言支持,添加了多线程并发处理支持,对JDK的Future进行了封装,简化了现场回调处理;增强了持久化处理,全面支持Hibernate ORM5.0,不再支持Hibernate3.6以前版本,并去除了对iBatis的直接支持。
Spring子项目:
社区下载:http://spring.io/projects
Maven下载:
4.0.0
com.smart
chapter2
1.0
Spring4.x第二章实例
Spring4.x第二章实例
war
org.springframework
spring-beans
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-webmvc
${spring.version}
commons-dbcp
commons-dbcp
${commons-dbcp.version}
mysql
mysql-connector-java
${mysql.version}
javax.servlet
servlet-api
${servlet.version}
provided
org.aspectj
aspectjweaver
${aspectj.version}
org.testng
testng
${testng.version}
test
org.springframework
spring-test
${spring.version}
test
org.mortbay.jetty
maven-jetty-plugin
6.1.25
8000
60000
/bbs
0
org.apache.maven.plugins
maven-surefire-plugin
2.17
methods
10
UTF-8
4.2.2.RELEASE
8.0.12
3.0-alpha-1
1.8.1
1.9
1.4
5.0.2.Final
8.1.8.v20121106
1.7.5
6.8.7
获取文档支持:
https://spring.io/docs/reference提供所有Spring项目的在线文档
也可以下载pdf文档方便离线阅读:
截取至红色方框部分访问就可以看到各种提供的文档了,如果没有离线文档可以查看其他版本的spring文档目录,实在没有记住这个网址就是了,个人觉得浏览器阅读反而美观方便一点