是什么?
spring是一款主流的JavaEE轻量级开源框架,spring由“spring”之父,Rob Johnso 提出并创立,其目的是用于简化Java企业级应用开发难度和开发周期;
分为两个方面:
从两个方面来看:广义上;狭义上;
广义上的 spring: spring技术栈(泛指以spring Framework 为核心的spring技术栈)
狭义上:Spring Framework(特指Spring Framework ,通常我们将他称为Spring 框架)
其中最重要的是:IOC、跟AOP:
IOC:
控制反转,指把创建对象的过程交给Spring进行管理;
IOC容器:
意思为:“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程的法则,能够知道我们如何设计出低耦合,更优良的程序;
spring 通过IOC容器来管理所有Java对象的实例化,初始化,控制对象与对象之间的依赖关系,我们将由IOC容器管理的Java对象称之为spring bean ,(它与使用new创建对象没有区别)
理解控制反转:
将对象的创建权力交出去,交给第三方容器负责;
将对象和对象之间关系的维护交出去,交给第三方容器管理;
常见的两种注入方式:
第一种:set注入
第二种:构造注入
BeanFactory:是IOC容器的基本实现,是spring内部使用的接口,面向spring本身,不提供给开发人员使用;
ApplicationContext:BeanFactory的子接口,提供了更过高级的特性,面向spring的使用者,几乎所有场合都使用ApplicatioContext,而不是底层的BeanFactory;
bean管理说的是:bean对象的闯将,以及bean对西昂中属性的赋值(或者叫bean对象之间的关系维护)
AOP:
是面向切面的程序编程,AOP用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统代码的重复代码,降低模块之间的耦合度;
例外:接口中的实现类是.Java文件类型,只要添加implements就是实现类了;
AOP:AspectOriented Programming (面向切面编程、面向方面编程),其实i局势面向特定方法的编程;
实现:动态代理是面向切面编程最主流的实现。而springAop 是spring框架的高级技术,旨再管理bean对象的过程中,主要通过底层动态代理机制,对特定方法进行编程;
AOP核心概念:
连接点:joinpoint 可以被aop控制的方法(暗含方法执行时的相关信息)
同志:advice 指那些重复的逻辑,也就是共性功能(最终体现为一个方法)
切入点:pointcut ,匹配连接点的跳进,通知仅会在切入点执行时被应用
切面:aspect,描述统治与切入点的对应关系(同志+切入点)
目标对象:target ,通知应用的对象;
同志类型:
@before(前置通知)
@after(后置通知) 重要
@Around(环绕通知,重点)
@afterRetruning(返回后通知,了解)
@afterThrowing(异常后通知,了解)
通知顺序:
当多个切面的切入点都匹配到了目标方法,目标方法运行时,多个通知都回被执行;
执行顺序
1、不同切面中,默认按照切面类的类名字母排序:
目标方法前的通知方法:字母排名靠前的先执行;
目标方法后的通知方法:字母排名靠前的后执行
2、用@order(数字)加在切面类上来控制顺序
目标方法前的通知方法:数字小的先执行
目标后的通知方法:数字小的后执行
切入点表达式
切入点表达式:描述切入点方法的一种表达式
作用:主要用来决定项目中的那些方法需要加入通知:
常见形式:
2、excution(.....):根据方法的签名来匹配
2、@annotation(.....):根据注解匹配
在spring6中的AOT概述:
JIT 与AOT的区别:是指两种不同的编译方式,这两种编译方式的主要区别在于“运行时”进行编译;
1、jit:动态(即时编译),边运行边编译
在程序运行时,根据算法计算出热点代码 ,然后进行实时编译,这种方式吞吐量高,有运行是性能加成,可以跑的更快,并且可以动态生成代码等,但是相对启动速度较慢,并需要一定时间和调用频率才能触发jit分层机制;
2、AOT:指运行前编译,预先编译;
AOT编译能直接将源代码转化为机器码,内存占用低,启动速度快,可以无需 runtime 运行,直接将runtime静态链接至最终的程序中,但是无运行时性能加成,不能根据程序运行情况做进一步的优化,AOT 缺点就是在程序运行前编译会使程序安装的时间增加。