什么是spring
Spring是一个基于IOC(控制反转)和AOP(面向切面)的结构J2EE系统的框架
AOP
IOC
IOC 反转控制 是Spring的基础,Inversion Of Control
依赖注入和控制反转的理解
控制反转的技术描述:
简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象
Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
解释:比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。
spring优点
- spring是面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
- Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
- Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
- Spring对Junit4支持,可以通过注解方便的测试Spring程序
spring体系结构
Spring框架整体被分为五个模块:核心容器(core container), 面向切面编程(aop), 数据访问(date access), web, test.
core
core部分包含4个模块
spring-core:依赖注入IoC与DI的最基本实现
spring-beans:Bean工厂与bean的装配
//JavaBean是一个遵循特定写法的Java类:
1.这个Java类必须具有一个无参的构造函数
2.属性必须私有化。
3.私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
4.提供getter和setter方法。
这样,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
//
spring-context:spring的context上下文即IoC容器
spring-expression:spring表达式语言
因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging
aop
aop部分包含4个模块
spring-aop:面向切面编程
spring-aspects:集成AspectJ //实现AOP的框架
spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
spring-instrument-tomcat:针对tomcat的instrument实现(包含了spring的tomcat设备代理)
data access
data access部分包含5个模块
spring-jdbc:jdbc的支持
spring-tx:事务控制
spring-orm:对象关系映射,集成orm框架
spring-oxm:对象xml映射
spring-jms:java消息服务
web
web包含4个模块
spring-web:基础web功能,如文件上传 //
spring-webmvc:mvc实现
spring-webmvc-portlet:基于portlet的mvc实现
spring-websocket:为web应用提供的高效通信工具
test
spring-test:spring测试,提供junit与mock测试功能
//JUnit是一个开放源代码的Java测试框架
junit是在极限编程和重构(refactor)中被极力推荐使用的工具
极限编程基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试
//
spring-context-support:spring额外支持包,比如邮件服务、视图解析等