一.Spring 概述
1. 什么是spring?
Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。
2. 如何实现简化java开发的目标?
为了降低java开发的复杂性,spring主要采取以下4种关键策略:
- 基于POJO的轻量级和最小侵入性编程。
- 通过依赖注入和面向接口编程实现松耦合。
- 基于切面和惯例进行声明式编程。
- 通过切面和模版减少样式代码。
3. 使用Spring框架的好处是什么?
- 轻量:Spring 是轻量的,基本的版本大约2MB。
- 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
- 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开,并使系统服务模块化。
- 容器:Spring 包含并管理应用中对象的生命周期和配置。
- MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
- 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
- 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。
- 提供模版:减少了样板式代码
4. Spring由哪些模块组成?
spring可以分为6个定义明确的模块组成:
- 核心容器模块:是spring中最核心的模块。负责Bean的创建,配置和管理。主要包括:beans,core,context,expression等模块。
- Spring的AOP模块:主要负责对面向切面编程的支持,帮助应用对象解耦。
- 数据访问和集成模块:包括JDBC,ORM,OXM,JMS和事务处理模块,其细节如下:
- JDBC模块提供了不再需要冗长的JDBC编码相关了JDBC的抽象层。
ORM模块提供的集成层。流行的对象关系映射API,包括JPA,JDO,Hibernate和iBatis。
OXM模块提供了一个支持对象/ XML映射实现对JAXB,Castor,使用XMLBeans,JiBX和XStream 的抽象层。
Java消息服务JMS模块包含的功能为生产和消费的信息。
事务模块支持编程和声明式事务管理实现特殊接口类,并为所有的POJO。
- Web和远程调用:包括web,servlet,struts,portlet模块。
- 测试模块:test
- 工具模块
5.常用的几个应用上下文
- ClassPathXmlApplicationContext:从类路径下的xml配置文件中加载上下文定义.
- FileSystemXmlApplicationContext:读取文件系统下xml配置文件并加载
- XmlWebApplicationContext:读取Web应用下的Xml配置文件并加载上下文定义
二.容器
创建应用对象之间关系的传统方法通常会导致对象之间耦合性过高,且难以复用和测试.spring通过容器使得对象无需自己负责查找和创建与其关联的其他对象,做到解耦.
装配:创建应用对象之间协作关系的行为称为装配,这是依赖注入的本质.
1.依赖注入(DI)
概念:对象的依赖关系将有负责协调系统中各个对象的第三方组建在创建对象时设定。对象无需自行创建或管理它们的依赖关系—依赖关系将自动注入到需要它们的对象中去。
对象无需知道依赖对象来自何处或依赖的实现方式。
依赖注入能让相互协作的软件组件保持松散耦合。AOP编程允许把你遍布应用各处的功能分离出来形成可重用的组件
2.Spring容器可归为两种:
Bean工厂(由org.springframework.beans.factory.BeanFactory)
应用上下文(org.springframework.context.ApplicationContext)
3.Spring框架中bean的生命周期。
- Spring容器 从XML 文件中读取bean的定义,并实例化bean。
- Spring根据bean的定义填充所有的属性。
- 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
- 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
-
如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
- 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
- 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
- 如果bean实现了 DisposableBean,它将调用destroy()方法。
4.spring的核心框架带有10个命名空间配置
5.构造器注入
<constructor-arg value="" /> <constructor-arg ref="" />