Spring知识点
2021-06-07 09:34:07 0 举报
AI智能生成
Spring知识点
作者其他创作
大纲/内容
SpringIOC
IOC和DI的概念
IoC(思想,设计模式)主要的实现方式有两种:依赖查找,依赖注入。
依赖注入是一种更可取的方式(实现的方式)
使用IOC的好处
不用自己组装,拿来就用。
享受单例的好处,效率高,不浪费空间
便于单元测试,方便切换mock组件
便于进行AOP操作,对于使用者是透明的
统一配置,便于修改
IOC容器
Spring容器(Bean工厂)可分为两种:
BeanFactory,这是最基础、面向Spring的
ApplicationContext,这是在BeanFactory基础之上,面向使用Spring框架的开发者。提供了一系列的功能!
Bean生命周期:
BeanDefinitionReader读取Resource所指向的配置文件资源,然后解析配置文件。配置文件中每一个<bean>解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中;
容器扫描BeanDefinitionRegistry中的BeanDefinition;调用InstantiationStrategy进行Bean实例化的工作;使用BeanWrapper完成Bean属性的设置工作;
ApplicationContext和BeanFactory区别
ApplicationContext会利用Java反射机制自动识别出配置文件中定义的BeanPostProcessor、 InstantiationAwareBeanPostProcesso 和BeanFactoryPostProcessor后置器,并自动将它们注册到应用上下文中。而BeanFactory需要在代码中通过手工调用addBeanPostProcessor()方法进行注册
ApplicationContext在初始化应用上下文的时候就实例化所有单实例的Bean。而BeanFactory在初始化容器的时候并未实例化Bean,直到第一次访问某个Bean时才实例化目标Bean。
单例Bean缓存池:Spring 在DefaultSingletonBeanRegistry类中提供了一个用于缓存单实例 Bean 的缓存器,它是一个用HashMap实现的缓存器,单实例的Bean以beanName为键保存在这个HashMap中。
IOC容器装配Bean
装配Bean方式
XML配置
Java配置
注解
基于Groovy DSL配置(这种很少见)
依赖注入方式
属性注入-->通过setter()方法注入
构造函数注入
工厂注入
Bean对象之间关系
依赖-->挺少用的(使用depends-on就是依赖关系了-->前置依赖【依赖的Bean需要初始化之后,当前Bean才会初始化】)
继承-->可能会用到(指定abstract和parent来实现继承关系)
引用-->最常见(使用ref就是引用关系了)
Bean的作用域
单例Singleton
多例prototype
与Web应用环境相关的Bean作用域
reqeust
session
globalSession
使用与Web应用环境相关的Bean作用域需要手动设置代理
处理自动装配的歧义性
使用@Primary注解设置为首选的注入Bean
使用@Qualifier注解设置特定名称的Bean来限定注入!
引用属性文件以及Bean属性
引用配置文件的数据使用的是${}
引用Bean的属性使用的是#{}
短小不常见的知识点
组合配置文件:XML与JavaConfig互相引用
方法替换:使用某个Bean的方法替换成另一个Bean的方法
属性编辑器:Spring可以对基本类型做转换就归结于属性编辑器的功劳!
国际化:使用不同语言(英语、中文)的操作系统去显式不同的语言
profile与条件化的Bean:满足了某个条件才初始化Bean,这可以方便切换生产环境和开发环境~
容器事件:类似于我们的Servlet的监听器,只不过它是在Spring中实现了~
Spring AOP
AOP原理
AOP实际上就是OOP的补充,将代码横向抽取成一个独立的模块,再织入到目标方法中
底层是动态代理技术
JDK动态代理(基于接口)
CBLib动态代理(基于类)
在Spring AOP中,如果使用的是单例,推荐使用CGLib代理
AOP术语
连接点(Join point)
能够被拦截的地方
切点(Poincut)
具体定位的连接点
增强/通知(Advice)
表示添加到切点的一段逻辑代码,并定位连接点的方位信息
织入(Weaving)
将增强/通知添加到目标类的具体连接点上的过程。
引入/引介(Introduction)
允许我们向现有的类添加新方法或属性。是一种特殊的增强!
切面(Aspect)
切面由切点和增强/通知组成,它既包括了横切逻辑的定义、也包括了连接点的定义
Spring对AOP的支持
基于代理的经典SpringAOP:需要实现接口,手动创建代理
纯POJO切面:使用XML配置,aop命名空间
@AspectJ注解驱动的切面:使用注解的方式,这是最简洁和最方便的!
知识点
增强方式
前置增强
后置增强
环绕增强
异常抛出增强
引介/引入增强
切面类型
一般切面
切点切面
引介/引入切面
自动创建代理对象
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
AnnotationAwareAspectJAutoProxyCreator
切点函数
方法切点函数,其中execution()是用得最多的
方法入参函数切点函数
目标类切点函数类
代理类切点函数
0 条评论
下一页