1.3.1 Spring的概述 1.3.1.1 什么是Spring · Spring:SE/EE开发的一站式框架。 · 一站式框架:有EE开发的每一层解决方案。 · WEB层:SpringMVC · Service层:Spring的Bean管理,Spring声明式事务 · DAO层:Spring的Jdbc模板,Spring的ORM模块 1.3.1.2 为什么学习Spring 1.3.1.3 Spring的版本 Spring3.x和Spring4.x 1.3.2 Spring的入门(IOC) 1.3.2.1 什么IOC · IOC: Inversion of Control(控制反转)。 · 控制反转:将对象的创建权反转给(交给)Spring。 1.3.2.2 下载Spring的开发包 官网: 1.3.2.3 解压Spring的开发包 · docs:Spring的开发规范和API · libs:Spring的开发的jar和源码 · schema:Spring的配置文件的约束 1.3.2.4 创建web项目,引入jar包 1.3.2.5 创建接口和类 · 问题: · 如果底层的实现切换了,需要修改源代码,能不能不修改程序源代码对程序进行扩展? 1.3.2.6 将实现类交给Spring管理 在spring的解压路径下spring-framework-4.2.4.RELEASEdocsspring-framework-referencehtmlxsd-configuration.html 1.3.2.7 编写测试类 1.3.2.8 IOC和DI(*****) · IOC:控制反转,将对象的创建权反转给了Spring。 · DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。 · 面向对象的时候 · 依赖 Class A{ } Class B{ public void xxx(A a){ } } · 继承:is a Class A{ } Class B extends A{ } · 聚合:has a 1.4 Spring的工厂类 1.4.1 Spring的工厂类 1.4.1.1 Spring工厂类的结构图 · ApplicationContext继承BeanFactory。 1.4.1.2 BeanFactory:老版本的工厂类 · BeanFactory:调用getBean的时候,才会生成类的实例。 1.4.1.3 ApplicationContext:新版本的工厂类 · ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。 · ApplicationContext有两个实现类 · ClassPathXmlApplicationContext:加载类路径下的配置文件 · FileSystemXmlApplicationContext:加载文件系统下的配置文件 1.5 Spring的配置 1.5.1 XML的提示配置 1.5.1.1 Schema的配置 1.5.2 Bean的相关的配置 1.5.2.1 标签的id和name的配置 · id:使用了约束中的唯一约束。里面不能出现特殊字符的。 · name:没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。 · Spring和Struts1框架整合的时候 · 1.5.2.2 Bean的生命周期的配置(了解) · init-method:Bean被初始化的时候执行的方法 · destroy-method:Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭) 1.5.2.3 Bean的作用范围的配置(重点) · scope:Bean的作用范围 · singleton:默认的,Spring会采用单例模式创建这个对象。 · prototype:多例模式。(Struts2和Spring整合一定会用到) · request:应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。 · session:应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。 · globalsession:应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。 1.6 Spring的Bean管理(XML方式) 1.6.1 Spring的Bean的实例化方式(了解) Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式: 1.6.1.1 无参构造方法的方式(默认) · 编写类 · 编写配置 1.6.1.2 静态工厂实例化的方式 · 编写Bean2的静态工厂 · 配置 1.6.1.3 实例工厂实例化的方式 · Bean3的实例工厂 · 配置 1.6.2 Spring的属性注入 1.6.2.1 构造方法的方式的属性注入 · 构造方法的属性注入 1.6.2.2 Set方法的方式的属性注入 · Set方法的属性注入 · Set方法设置对象类型的属性 1.6.2.3 P名称空间的属性注入(Spring2.5以后) · 通过引入p名称空间完成属性的注入: · 写法: · 普通属性p:属性名="值" · 对象属性p:属性名-ref="值" · P名称空间的引入 · 使用p名称空间 1.6.2.4 SpEL的属性注入(Spring3.0以后) · SpEL:Spring Expression Language,Spring的表达式语言。 · 语法: · #{SpEL} 1.6.3 集合类型属性注入(了解) 1.6.3.1 配置 "collectionBean" class="com.itheima.spring.demo5.CollectionBean"> "arrs"> 王东 赵洪 李冠希 "list"> 李兵 赵如何 邓凤 "set"> aaa bbb ccc "map"> "aaa" value="111"/> "bbb" value="222"/> "ccc" value="333"/> 1.7 Spring的分模块开发的配置 1.7.1 分模块配置 1.7.1.1 在加载配置文件的时候,加载多个 1.7.1.2 在一个配置文件中引入多个配置文件 1.8 CRM的综合案例 1.8.1 代码实现 1.8.1.1 创建数据库和表 1.8.1.2 创建web项目,引入jar包 · 引入struts2的开发的jar包 · 引入struts2的配置文件 · web.xml · struts.xml 1.8.1.3 引入页面 1.8.1.4 编写Action类 1.8.1.5 配置Action 1.8.1.6 修改页面提交到Action 1.8.1.7 编写Action的save方法 · 不在Action中直接创建Service,将Service交给Spring管理。 · 创建Service接口和实现类 1.8.1.8 引入Spring的环境 · 引入jar包 · 引入配置文件 1.8.1.9 将Service交给Spring 1.8.1.10 在Action中调用Service 1.8.1.11 编写DAO并且完成配置 · 编写DAO的接口和实现类 · 将DAO交给Spring管理 1.8.1.12 在Service中使用DAO 1.8.2 问题描述 1.8.2.1 程序问题 · 每次请求都会创建一个Spring的工厂,这样浪费服务器资源,应该一个项目只有一个Spring的工厂。 · 在服务器启动的时候,创建一个Spring的工厂。 · 创建完工厂,将这个工厂类保存到ServletContext中。 · 每次使用的时候都从ServletContext中获取。 · *****使用ServletContextListener · 监听ServletContext对象的创建和销毁。 1.8.2.2 解决方案:使用Spring核心监听器ContextLoaderListener(整合web项目) · 引入jar包 spring-web.jar · 配置监听器 · 在Action中获取工厂