1.理解什么是Spring框架?
spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,Hibernate框架等组合使用。
2.Spring框架的优缺点:
优点:
轻量级的容器框架没有侵入性
使用IoC容器更加容易组合对象直接间关系,面向接口编程,降低耦合
Aop可以更加容易的进行功能扩展,遵循ocp开发原则
创建对象默认是单例的,不需要再使用单例模式进行处理
缺陷:业务功能依赖spring特有的功能,依赖与spring环境
3.Spring六大模块:
关键术语:
IOC (Inversion Of Control) 控制反转 IOC容器 = BeanFactory + bean.xml
负责对象创建反转,在spring中BeanFacotory是IOC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。
DI dependency injection 依赖注入(处理对象的依赖关系!如:创建Action后需要处理Action依赖Service)
spring中有三种注入方式,一种是set注入,一种是接口注入,另一种是构造方法注入。
Aop aspect object program 面向切面编程!
AOP就是纵向的编程,如业务1和业务2都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。
spring中面向切面变成的实现有两种方式,一种是动态代理,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承。
4.Spring开发步骤:
1.下载Spring源码并引入Jar文件:(3.0之后,spring源码中只有spring的功能,如果spring有依赖其他包,需要单独下载)
commons-logging-1.1.3.jar 【需要单独下载, spring 依赖的日志包】
spring-beans-3.2.5.RELEASE.jar 【3.2 源码:Spring bean节点支持】
spring-context-3.2.5.RELEASE.jar 【3.2 源码:上下文支持】
spring-core-3.2.5.RELEASE.jar 【3.2 源码:核心功能】
spring-expression-3.2.5.RELEASE.jar 【3.2 源码:Spring 表达式】
2.配置Application.xml/bean.xml (名字可以取其中一个)
将需要创建的对象都在Spring容器中进行配置,对应的名称空间和约束可以去源码中拷贝!
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!-- 创建一个User对象 --> 8 <bean id="user" class="cn.itcast.b_ioc.User"></bean> 9 </beans>
3.创建IOC容器并通过IOC容器创建对象!
1.通过无参或者有参构造函数创建对象;
2.使用工厂类创建对象;
5.详解Spring创建Bean:
1 <bean id="user" class="cn.itcast.b_ioc_bean.User" scope="singleton" lazy-init="true" init-method="init" destroy-method="destroy"></bean>
5.1.通过scope指定bean是单例还是多例:
scope="singleton" 单例, 启动时候创建所有单例的bean
scope="prototype" 多例, 启动时候不会创建,【每次从容器获取实例时候,都会创建一个新的bean】
当创建Dao/Service时候,可以指定singleton, 也可以不指定,默认就是单例!创建Action时候必须指定!
5.2. 延迟初始化
lazy-init="false" 不延迟初始化
lazy-init="true" 表示:在初始化容器时候,没有创建单例的bean;
在第一次从容器中获取时候创建实例;如果再次获取,获取是上次创建的单例的对象
5.3. 初始化与销毁方法
init-method=" "
初始化方法, 创建完对象之后执行初始化方法; 如果是单例,执行一次; 多例就执行多次
destroy-method=" "
当调用ClassPathXmlApplicationContext对象的destroy方法的时候执行!
6.Bean的生命周期:
6.1.先创建IOC容器对象
6.2.每次从容器获取bean,才创建对象
6.3.创建完对象后,执行初始化方法 (每次创建对象后执行)
6.4.对象创建完毕
6.5.容器销毁,执行destroy方法