你的位置:首页 > Java教程

[Java教程]Spring学习笔记01_基础知识


1.Spring体系结构?

主要分为5大模块:

(1)数据访问和集成:JDBC、ORM、OXM、JMS、事务管理。

  Spring站在DAO的抽象层面,建立了一套面向DAO层统一的异常体系,同时将各种访问数据的检查异常型异常转换为非检查异常,为整合各种之久层框架提供给了基础。

  其次,Spring通过模板化技术对各种数据库访问技术进行了薄层的封装,将模式化的代码隐藏起来,简化了数据库访问的代码。

  这样,Spring就建立了和数据形式访问技术无关的统一的DAO层,借助AOP技术,Spring提供了声明式事务的功能。

(2)Web及远程操作:MVC、Web Service、Portlet

  该模块建立在Application Context 模块之上,提供了Web应用的各种工具类。如通过Listener或Servlet初始化Spring容器,将Spring容器注册到Web容器中。

  其次,该模块还提供了多种面向Web的功能,例如透明化文件上传、Velocity、FreeMarker、XSLT的支持。

  此外,SPring还可以整合Struts2、WebWork等MVC框架。  

(3)测试框架

(4)AOP:Spring AOP、Aspects

  Aop是进行横切逻辑编程的思想,它开拓了思考问题的思路。

(5)IoC:Bean、Context、表达式语句

  Spring核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方法进行依赖关系的描述,由IoC容器负责依赖之间的创建、拼接、管理、获取等工作。

  BeanFactory接口是Spring框架的核心接口,它实现了容器许多核心的功能。

  Context模块构建与核心模块之上,扩展了BeanFactory的功能,添加了il8n国际化、Bean生命周期的控制、框架事件体系、资源加载透明化等多项功能。该模块还提供了许多企业级服务的支持,例如邮件服务、任务调度、JNDI定位、EJB集成、远程访问等。ApplicationContext是Context的核心接口。

  表达式语言是统一表达式语言(unified EL)的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置和获取对象属性,调用对象方法、操作数组、集合等。还提供了逻辑表达式运算、变量定义等功能,使用它可以方便的通过表达式串和SpringIoC容器的交互。

 

2.理解IoC(Inversion of Control,控制反转)

  了解DI(Dependency Injection) :依赖注入,不管是控制层的Action对象,业务层的Service对象,还是持久层的DAO对象,都可以在Spring的管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无需关心Service对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大大减少。

  之所以被称为依赖注入,因为被调用者实例的工作通常由Spring容器完成,然后注入调用者。程序运行过程中,如果需要弟阿勇一个对象协助时,无需在代码中创建被调用者,而是依赖外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持POJO之间依赖关系的管理。

  DI(依赖注入)和Ioc(控制反转)是同一个概念。

  IoC:当某个角色(一个java实例,调用者)需要另一个角色(另一个java实例,被调用者)的协助时,在传统的程序设计过程中,一般由调用者来创建被调用者的实例。在Spring中,创建被调用者的工作不再是由使用者完成,因此成为控制反转。也就是说,所有的组件都是被动的,所有的组件和调用都是有容器负责,并由容器负责管理。

 

3.Spring注入

Spring注入是在启动Spring容器加载Bean的时候,完成对变量的赋值行为。

常用的两种注入方式:设置注入 和 构造注入。

 

4.Bean的作用域

singleton:单例,指一个Bean容器中值存在一份。

prototype:每次请求(每次使用)都会创建新的实例,destroy方式不生效。

request:每次http请求创建一个实例且仅在当前request内有效

session:同上,每次http请求的创建,当前session内有效

global session:基于portlet的文本中有效(portlet定义了global session),如果是在web中,同session。

 

5.Bean的生命周期

(1).定义

(2).初始化

  实现org-springframework.beans.factory.InitializingBean接口,覆盖afterPropertySet方法

  配置init-method

(3).使用

(4).销毁

  实现org-springframework.beans.factory.DisableBean接口,覆盖destroy方法。

  配置destory-method

 

6.Spring中Bean的生命周期

(1)Singleton作用域

  当一个Bean的作用域设置为singleton,那么Spring IoC容器中只会存在一个共享的Bean实例,并且所有对Bean的请求,只要id与该Bean定义相匹配,则会返回Bean的同一实例。当把一个Bean定义设置为singleton作用域时,Spring IoC容器只会创建该Bean的唯一实例。这个单例会被存储到单例缓存中,并且所有针对该Bean的后续请求和引用都将返回被花村的对象实例。

(2).prototype作用域

  prototype作用域部署的Bean,每一次请求(将注入到另一个Bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的Bean实例。相当于一个new操作。对于prototype作用域的Bean,有一点非常重要,那就是Spring不能对一个prototype Bean的整个生命周期负责,容器在初始化、配置或者是装配完一个prototype实例后,将它嫁给客户,随后就不管了。