本文共 5267 字,大约阅读时间需要 17 分钟。
一. Spring概述
1. 什么是Spring
Spring是一站式框架 spring在javaEE三层结构结构中,每一层都提供不同的解决技术
- web 层:Spring MVC.
- 业务层(service):spring中的Bean 管理:(IOC)
- 持久层(dao):Spring 的 JDBC 模板.ORM 模板用于整合其他的持久层框架
2. Spring 版本
- hibernate 5.x
- spring 4.x
- struts 2
3. 为什么学习spring
方便解耦,简化开发
- Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理
AOP 编程的支持
- Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
- 只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
- Spring 对 Junit5 支持,可以通过注解方便的测试 Spring 程序
方便集成各种优秀框架
- Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz 等)的直接支持
降低 JavaEE API 的使用难度
- Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些 API 应用难度大大降低
4. spring核心两部分
spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架
(1). AOP:面向切面编程
扩展功能不是修改源代码实现
(2). IOC:控制反转
- 比如有一个类,在类里面有方法(不是静态的方法)调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象
把对象的创建不是通过new方式实现,而是交给spring配置创建类对象(交给spring进行管理)
5. 扩展
Spring Boot
- 一个快速开发的脚手架
- 基于SpringBoot可以快速的开发单个微服务
- 约定大于配置
Spring Cloud
- SpringCloud是基于SpringBoot实现的
因为现在大公司都是用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring及SpingMVC,承上启下的作用
弊端:发展太久之后,违背了原来的理念,配置十分繁琐,人称配置地狱
二. Spring的入门(IOC)
1. ioc的操作分为两部分
(1). ioc通过配置文件方式实现
(2). ioc基于注解的方式实现
2. ioc底层原理
- 控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法
- IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
- Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象
(1). ioc底层原理使用技术
利用set进行动态实现值的注入
- 这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建,系统的耦合性大大降低,可以更加专注的在业务的实现上。
1. xml配置文件
2. dom4j解决xml
3. 工厂设计模式
4. 反射
3. ioc入门案例
(1). 第一步 导入jar包
1. 解压资料zip文件
Jar包特点:都有三个jar包
2. 导入核心jar包
spring最基本功能时候,导入四个核心的jar包就可以了
3. 导入支持日志输出的jar包
(2). 第二步 创建类,在类里面创建方法
(3). 第三步 创建spring配置文件,配置创建类
1. spring核心配置文件名称和位置不是固定的
- 建议放到src下面,官方建议applicationContext.xml
2. 引入schema约束
3. 配置对象创建
(4). 第四步 写代码测试对象创建
这段代码在测试中使用
(5). 解决配置文件没有提示
解决方法:
spring引入schema约束,把约束文件引入到eclipse中
(1)复制约束路径 www.springframework.org/schema/beans/spring-beans.xsd
4. IOC和DI区别
(1)IOC: 控制反转,把对象创建交给spring进行配置
(2)DI(Dependency Injection): 依赖注入,向类里面的属性中设置值
(3)关系:依赖注入不能单独存在,需要在ioc基础之上完成操作。需要有 IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去.
三. spring中的工厂
1. ApplicationContext
ApplicatioContext 接口有两个实现类:
- ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件.
- FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件.
2. BeanFactory
3. BeanFactory 和 ApplicationContext 的区别:
- BeanFactory :是在 getBean 的时候才会生成类的实例.
- ApplicationContext :在加载 applicationContext.xml 时候就会创建
四. spring的相关配置
1. Bean标签的常用属性
(1). id属性
起名称,id属性值名称任意命名
- id属性值,不能包含特殊符号
- 根据 id 值得到配置对象
(2). class属性
创建对象所在类的全路径
(3). name属性
功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号
(4). scope属性
-
singleton:默认值,单例
-
prototype:多例的
-
request :web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中
-
session :web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
-
globalSession :web 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当于 session
2. Bean 的生命周期的配置
- 通过配置标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method作为 Bean 的销毁的时候执行的方法。
- 销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被
五. spring的bean管理(xml配置文件)
1. bean实例化三种方式
2. bean实例化三种方式实现
(1). 第一种 使用类的无参数构造创建(重点)
必须要有无参构造方法,没有会出现异常
(2). 第二种 使用静态工厂创建
在类里面创建静态的方法,返回类对象
(3). 第三种 使用实例工厂创建
创建不是静态的方法,返回类对象
进行测试
3. 属性注入方式介绍
- 定义:创建对象时候,向类里面属性里面设置值
(1). java代码中属性注入的方式介绍(三种方式)
1. 使用set方法注入
2. 使用有参数构造注入
3.使用接口注入
(2). 在spring框架里面的:Bean 的属性注入
1. set方法注入属性(重点)
2. 有参数构造方法注入属性
(3). Spring 的属性注入:对象类型的注入(重点)
在spring中属性的注入不但但是普通的变量、字符串等,也可以是对象进行注入
1. 创建service类和dao类
在service得到dao对象
2. 在service里面把dao作为类型属性
3. 生成dao类型属性的set方法
4. 配置文件中注入关系
最后进行测试
(4). P名称空间注入(很少使用)
1. 第一步:引入 p 名称空间
2. 第二步:使用 p 名称空间.
- 普通属性:p:属性名称=“aaa”
- 对象类型属性:p:属性名称-ref=“bbb”
(5). spring注入复杂类型数据
注入:数组、集合等复杂数据类型
1 数组2 list集合3 map集合4 properties类型(键值对)
package property;import java.util.List;import java.util.Map;import java.util.Properties;public class Person { private String pname; public void setPname(String pname) { this.pname = pname; } private String[] arrs; private List list; private Map map; private Properties properties; public void setArrs(String[] arrs) { this.arrs = arrs; } public void setList(List list) { this.list = list; } public void setMap(Map map) { this.map = map; } public void setProperties(Properties properties) { this.properties = properties; } public void test1() { System.out.println("arrs:"+arrs); System.out.println("list:"+list); System.out.println("map:"+map); System.out.println("properties:"+properties); } }
老林 老王 阿飞
小奥 小王 小丁
root 123
最后进行测试
六. spring整合web项目原理
1. 加载spring核心配置文件
new对象,功能可以实现,效率很低
2. 实现思想:
把加载配置文件和创建对象过程,在服务器启动时候完成
3. 实现原理
(1). ServletContext对象
(2). 监听器
(3). 具体使用:
- 在服务器启动时候,为每个项目创建一个ServletContext对象
- 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
- 使用监听器监听到ServletContext对象创建时候, – 加载spring配置文件,把配置文件配置对象创建 – 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
- 获取对象时候,到ServletContext域得到 (getAttribute方法)
转载地址:http://phxzi.baihongyu.com/