目录
- 前言
- 1. 概念详解
- 1.1 IOC与AOP
- 1.2 IOC与DI
- 1.3 接口区别
- 2. 注入方式
- 2.1 基本类型
- 2.2 复杂类型
- 3. 配置属性
- 4. 注解注入
- 5. AOP
前言
在看完上一篇文章每个知识点的时候
Spring框架从入门到学精(全)
大部分人对spring还是有些懵懂
可能是知识点比较凌乱所导致
以下这篇文章将带你二刷spring框架
本篇文章主要是理清思路逻辑,有个大纲
学习其细节还需要到上面的文章进行学习
1. 概念详解
1.1 IOC与AOP
主要的核心是IOC(控制反转)和AOP(动态代理)
而这两个核心也是面试的时候经常问的问题
-
IOC:控制反转,也就是控制权反转,传统的方式自个创建对象以及依赖关系等。反转之后,变成了可以由spring自行创建以及依赖关系的注入。总体来说就是反转对象创建方式,将创建的方式提交给spring也就是程序自已来执行。(以前都是自已去new,现在只需要告诉中介需求,中介给你送过来)
-
AOP:动态代理,实现代码增强的功能,而不会显得冗余复杂
每个代码模块各司其职,灵活组合,达到一种可配置的、可插拔的程序结构
1.2 IOC与DI
上面讲解了IOC的主要概念,现在开始理清DI的概念区别
IOC的控制反转向spring中索取,也就是向中介管理索取
DI 正是实现 IoC 的方法和手段
一个重要特征是反射,它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入
- 注入方式: 1.set方式注入 2.构造方法注入 3.字段注入
- 注入类型: 1.值类型注入 2.引用类型注入
1.3 接口区别
- BeanFactory,Spring内部使用接口,不提供给开发人员,加载配置xml解析不会创建,只有创建对象才会getBean
- ApplicationContext是BeanFactory子接口,功能强大,开发人员可使用,加载配置就会创建对象
ApplicationContext有一些特别的实现类
- ClassPathXmlApplicationContext,在src目录下可以写文件名
- FileSystemXmlApplicationContext,在src目录下,必须写绝对路径
2. 注入方式
2.1 基本类型
set方式注入
值类型用value注入
引用类型用ref注入
无参构造
有参数构造
constructor-arg是有参构造函数的属性
p名称空间注入
set注入,spring特有,为了简化<property>
写法
引用名称空间p
xmlns:p="http://www.springframework.org/schema/p"
注入其他属性
2.2 复杂类型
数组注入
列表注入
set类型注入
map类型注入
注入对象属性
测试文件
以上读取的测试文件通过获取xml文件
3. 配置属性
其中主要通过bean来进行配置
具体各个属性概念大致如下
- bean元素:spring容器管理对象
- name属性:对象名字,获得对象时getBean(“name值”)
- class属性:对象的完整类名
- id属性:与name属性一样,但该id不可重复
spring中的配置属性具体概念如下
本身默认的时候是单实例
通过测试代码也可得知
所谓的单实例或者是多实例
主要通过配置bean标签内部的scope属性
- singleton 单实例对象,默认是这个。加载spring配置的时候就会创建对象
- prototype 多实例对象。调用getBean方法的时候就会创建对象。
还有一个属性是自动装配
bean标签属性autowire,配置自动装配
autowire属性常用两个值:
byName根据属性名称注入 ,注入值bean的id值和类属性名称一样
byType根据属性类型注入
bean生命周期
具体生命周期的步骤如下
从创建对象到对象销毁的过程
1.为构造器创建bean的实列(无参构造)
2.为bean的属性设置和对其他bean引用(调用set方法)
3.bean初始化配置
4.获取bean
5.销毁bean
4. 注解注入
创建对象提供注解
@Component: 游戏中普通的注解
@Service :业务逻辑层以及Service层
@Controller: 外部层
@Repository :dao层即持久层
功能是一样的,都可以用来创建对象,只不过把每个对象用在不同地方,以便查看
以上都要开启组件扫描
通过context的名称空间
而且可以通过该标签设置可过滤还是不可过滤的东西
通过值的注入
@Autowired
:根据属性类型自动装配
@Qualifier(value=" ")
:根据属性名称自动注入
@Resource
:可根据属性类型或者名称注入
@Value
:注入普通类型的注入
基于注解类,没有了xml,那么就不是扫描xml文件
而是注解类的函数
主要用法如下
5. AOP
动态代理,也就是只增强代码部分
基本的概念
- 连接点:类中有哪些方法可以被增强,这些方法称之为连接点
- 切入点:实际被增强的方法
- 通知(增强):实际增强的逻辑部分称之为通知(增强)
- 通知有多种类型:前置通知、后置通知、环绕通知(前后执行)、异常通知(只有异常才会通知)、最终通知(类似finally)
- 切面:把通知应用到切入点的过程,是一个动作的过程
主要通过代理类来实现代码增强的功能
两个最主要的类为
代码截图如下