1. Spring MVC简介
Spring MVC是java EE平台请求驱动类型的轻量级Web框架,使用了MVC设计模式的思想,spring框架的主要优势之一就是分层架构,分层架构允许选择使用任何一个组件,同时也可以集成其它框架技术,例如:Struts2、Hibernate等
Spring框架具有以下特点:
1. 方便解耦,简化开发。通过spring3提供的IoC容器,可以将对象之间的依赖关系交由Spring3控制,避免编码所造成的程序过度耦合
2. AOP编程的支持。通过Spring3提供的AOP功能,方便进行面向切面编程,许多不容易使用面向对象程序设计(OOP)实现的功能可以通过AOP轻松实现
3. 声明式事务的支持。通过声明方式灵活地进行事务管理,提高开发效率和质量
4. 方便集成各种优秀框架。
Spring框架各个组件的功能:
1. 核心容器
核心容器提供Spring3框架基本的功能。核心容器的主要组件是BeanFactory和ApplicationContext。容器使用控制反转(IoC)模式将应用程序的配置和依赖性规范和实际的应用程序代码分开。
2. Spring上下文
Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如,校验、JNDI、EJB、电子邮件、国际化等
3. Spring AOP
通过配置管理特性,Spring AOP模块直接将面向切面的编程功能集成到Spring框架中,pring AOP模块提供了事务管理服务。
4. Spring DAO
JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
5. Spring ORM
Spring插入了若干个ORM框架,从而提供了ORM的工具,其中包括JDO、Hibernate、iBatisSQL Map。
2. Spring IoC(控制反转)
IoC是Inversion of Control的缩写,就是通过IoC容器来实现对象组件的装配和管理。也就是说,所有组件都是被动的,所有的组件初始化和调用都由IoC容器负责。
Spring IoC经常用到一个设计模式——工厂模式,工厂模式提供创建对象的接口。
Spring框架两个最基本的包是:org.springframework.beans.factory(主要接口是BeanFactory)和org.springframework.context(主要接口是ApplicationFactory)
IoC主要组件:
1. Beans
Beans指项目中提供业务功能Bean,即IoC容器要管理的Bean,Bean可以包含一些属性的getter和setter方法,也可以包含其他方法
2. 配置文件
Spring对Bean的管理在配置文件中进行.Bean的配置文件是一个xml文件,他通常命名为beans.xml、applicationContext.xml等,配置文件包含Bean的id、类、属性及其值。IoC容器通过Bean的id从Bean配置文件中取得Bean的类,并生成该配置文件的一个对象。
3. BeanFactory接口及其相关类
BeanFactory采用了工厂设计模式,即Bean容器模式,负责读取Bean的配置文件,管理对象的生成、加载,维护对象之间的依赖关系,负责Bean对象的生命周期。
org.springframework.beans.factory.BeanFactory是一个顶级接口,它包含管理Bean的各种方法,例如:getBean(String name),,根据Bean的id生成Bean的对象
4. ApplicationContext接口及其相关类
ApplicationContext接口提供高级功能的容器,例如:提供访问资源文件的更方便的方法,支持国际化等
注入的两种方式:
1. 设置注入
设置注入是通过setter方法注入被调用者的实例
2.构造注入
利用构造方法来设置依赖注入
3. Spring AOP(面向切面编程)
AOP为Aspect Oriented Programming的缩写,即面向切面编程(也叫面向方面),是一种可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。这些系统性的编程工作都可以独立编码实现,然后通过AOP技术切入进系统即可。
AOP分为静态AOP和动态AOP。静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。动态AOP是指将切面代码进行动态织入实现的AOP。Spring的AOP为动态AOP,实现的技术为:JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术)。尽管实现技术不一样,但都是基于代理模式,都是生成一个代理对象。