一、Spring Introduction

1.Spring起源
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。
它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
Spring是一个分层的Java SE/EE full-stack(一站式) 轻量级开源框架。
整合性轻量级框架,相当于一个平台。

2.Outline
在这里插入图片描述
3.核心概念
在这里插入图片描述
核心概念:
IOC:Inverse of control 控制反转
控制:控制是指应用程序中实例的生成权。比如,获取实例的方式是通过new一个对象,这就是一种控制。
反转:就是把控制由应用程序反转交给Spring。原先自己new出来实例,现在由Spring来创建实例。实例交给了Spring来管理,实例所在的地方就是容器,称为Spring容器或者IOC容器。

所谓IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。
所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

DI:Dependency Injection 依赖注入 (讨论的对象:Spring容器和应用程序)
通过上面的反转我们知道,应用程序“贫穷”,Spring“富有”。
依赖:谁依赖谁?为什么依赖?
应用程序依赖IOC容器,因为应用程序把实例都交给了IOC容器进行管理。
注入:谁注入谁?注入了什么?
IOC注入给应用程序,注入某个对象所需要的外部资源(包括对象、资源、常量数据)

AOP:面向切面编程

4.Spring优点
在这里插入图片描述
补充:
AOP是Spring中的动态代理。
事务通常在service层,Spring中声明事务可以通过只加一个注解实现,注解加在哪个方法上,哪个方法在一个事务里。

5.特性:
在这里插入图片描述
Core technologies: dependency injection(依赖注入), events(事件), resources(资源), i18n(国际化), validation(参数校验), data binding(参数校验和java Bean绑定起来), type conversion(类型转换), SpEL(spring表达时语言), AOP.(面向切面编程)。

6.Spring Framework
在这里插入图片描述

二、案例

1.入门案例1
开始使用spring管理实例
UserService
ProductService

1.1.创建对应的类
在这里插入图片描述

1.2.引入spring依赖
导入spring依赖的包
core, beans, context,expression ,aop 和 logging(日志包)
maven配置文件中只需要引入spring-context → 5+1
在这里插入图片描述
各个包之间的依赖关系
在这里插入图片描述
1.3.配置文件
application.xml 或者application-xxx.xml
约束 → xml中可以写哪些标签,标签中有哪些属性,标签间的顺序是什么样子
组件:spring配置文件中管理实例
在这里插入图片描述
xml文件中约束获得
1、已有的配置文件中复制一下
2、从spring官网referenceDoc下的appendix

创建一个文件模板file template下的appendix
在这里插入图片描述
在这里插入图片描述
4.3.2.管理组件
组件中的id属性不是必须的。
在这里插入图片描述
4.4.使用组件
在这里插入图片描述
spring配置文件中管理实例,我们称之为组件。

2.入门案例2
使用spring管理有依赖关系的组件
userService userDao
productService

2.1 引入依赖
在这里插入图片描述
2.2 创建有依赖的类
创建userDao和userDaoImpl
service中维护了dao的实例
在这里插入图片描述
2.3 spring配置文件
在这里插入图片描述
5.4单元测试
在这里插入图片描述
小结:
学习了IOC 和 DI 最大的感触是什么?
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法
依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

三、Spring两大核心容器(API)

Spring两大核心容器:ApplicationContext、BeanFactory

3.1接口、类的继承关系(ctrl+h看继承关系)
查看ApplicationContext的继承关系
在这里插入图片描述
3.2.FileSystem和Classpath
加载文件的位置不同
classpath:加载classpath目录下的配置文件
filesystem:加载的文件路径下的配置文件
在这里插入图片描述

四、Bean实例化

1.构造方法
无参构造(最常用的)
在这里插入图片描述
property标签通过set方法给成员变量赋值

有参构造
在这里插入图片描述
单元测试
在这里插入图片描述
2.工厂
根据工厂中的生产方法是否是静态的,可以分为静态工厂和实例工厂。如果是静态,可直接通过类名调用方法,如果是非静态,要先创建对象,再调用方法。
静态工厂
在这里插入图片描述
实例工厂
在这里插入图片描述
单元测试
在这里插入图片描述
3.FactoryBean
BeanFactory:生产全部实例
XXXFactoryBean:对应的组件类型是XXX
implements FactoryBean → getObject方法
在这里插入图片描述
4.spring容器中的bean的作用域
singleton:容器中的这个组件是单例模式,无论什么时候从容器从取对象始终都是一个对象
prototype:原型,和单例相反,每一次取出都是一个新的对象

singleton
在这里插入图片描述
prototype
在这里插入图片描述
默认的scope是什么
默认是单例,单例也是最最常用
在这里插入图片描述
5.bean的生命周期
在这里插入图片描述
不是所有组件都有aware的过程,只有实现aware的接口,才会有aware的过程,有对应的方法可执行。

scope和生命周期相关
单例:生命周期是容器初始化的时候开始。
prototype是调用getBean方法后,生命周期才开始。

单例有销毁这部分的生命周期,10,11。
prototype没有10和11。

5.1案例1(默认的scope为singleton)
在这里插入图片描述
otherBean中没有写任何方法,所以只执行BeanPostProccessor的方法。
在这里插入图片描述
除了实现BeanPostProcessor接口的组件(对象)本身不会执行来自该接口的方法,其他组件都会执行该接口的这两个方法。

5.2.案例2(修改为prototype)
在这里插入图片描述
6.CollectionBean
组件中的成员变量类型可以是基本数据类型,也可以是collection → 数组 、List、Set、Map、Properties。

6.1.定义bean中的成员变量
在这里插入图片描述
6.2.数组、List、Set
property下子标签不同 :array、list、set
在这里插入图片描述
在这里插入图片描述
6.3.Map
在这里插入图片描述
6.4.properties
在这里插入图片描述
6.5.运行结果
在这里插入图片描述

五、注解(重中之重)

组件扫描包的配置 → 配置将哪个包目录下的有注解(组件注册)的class注册到容器中。
在这里插入图片描述
1.组件注册
之前组件注册,写的是bean标签 → 通常包含class
使用注解进行组件注册一般是写在类定义上
1、@Component → 通用
2、@Service → 通常是加在service层的类上
3、@Repository → 通常是加在dao层的类上
4、@Controller → SpringMVC阶段注册组件的注解
可以使用注解的value属性来指定id → 上面的组件注册都可以这样使用。
在这里插入图片描述
2.注入
维护组件之间的关系
2.1.value
给组件中的基本类型、包装类、字符串类型的成员变量注入值
在这里插入图片描述
2.1.1.引用额外的配置文件
在这里插入图片描述
2.1.2.也可以在spring配置文件中使用
在这里插入图片描述
2.2.组件类型
1、@Autowired → 按照类型 → 这个类型组件只有一个
2、@Autowired + @Qualifier → 通过@Qualifier的value属性指定id
3、@Resource → 默认按照类型,如果需要指定id,使用name属性
在这里插入图片描述
补充:@Autowired如果类型没有匹配上,也可以按照id匹配
在这里插入图片描述
2.3.scope/lifecycle
2.3.1.scope
类定义上:默认不写仍然是singleton
在这里插入图片描述
2.3.2.生命周期
加在组件中的方法上
init-method:@PostConstruct
destroy-method:@PreDestroy
在这里插入图片描述
2.4.单元测试
2.4.1.导包
spring-test,注意版本应与spring-context保持一致
在这里插入图片描述
2.4.2.测试类上增加注解
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐