1. Spring框架作用:
Spring可以整合主流的第三方框架. 使软件调用变成一个整体
IOC/DI:
IOC(控制反转): 将对象的创建的权利交给第三方Spring容器进行统一管理(不把对象的创建写死在类里面, 配合面向接口编程, 当需求有变化时可以不用改动代码)
优点: 实现了程序调用的松耦合!!!
DI(依赖注入): 为Spring容器中对象的属性赋值, 一般对象中的属性以接口最为常见
注入方式:
a.set注入
b.构造注入
AOP:
作用: 对业务方法进行扩展(松耦合)
常见应用:
a.事务控制(减少方法冗余, 解耦 - 不用在方法里面每次声明事务开始和事务提交)
b.日志记录
c.安全控制(AOP/拦截器都可以实现)
d.缓存机制
e.异常记录
f.记录程序运行的时间, 对方法进行分析优化
AOP中通知类型
a.环绕通知[Around advice]: 使用最多并且功能强大, 能够控制目标方法是否执行(其他四个不行)
b.前置通知[Before advice]: 目标方法执行之前执行
c.正常返回通知[After returning advice]: 目标方法执行之后执行
d.异常返回通知(throwing ): 当目标方法出现异常时执行
e:返回通知[After (finally) advice]: 相当于try..catch中finally, 始终要执行的通知
切入点表达式
作用: 判断当前方法是否执行切面(if)
a.bean 类中的所有方法都会执行切面中的通知方法
b.within(包名.类名) 按照类型进行匹配, 多个类型匹配使用within(包名.*)
c.execution(返回值类型 包名.类名.方法名(参数列表))
execution(* com.indihx..*.*(..)); //..*表示子孙包, .*表示子包, 参数列表..表示通配
execution(* com.indihx..*.add(..)); //拦截com.indihx包下-所有类的-add()方法
execution(* com.indihx..*.a*(int)); //拦截com.indihx包下-所有类的-以a开头的-只有一个int类型参数的-方法
d.@annotaiton(com.indihx.Bingo); //匹配com.indihx包下的名称为Bingo的注解
a,b粗粒度很少使用, c细粒度用的多, d在微服务开发中常用
切面公式: 切面 = 切入点表达式 + 通知*;
==========================================================================================================================================
2. Spring框架中如何维护对象
Spring容器在启动时, 首先会解析xml(注解)配置文件, 之后在内存中创建一个大型的Map集合, 将bean的id当作Map当中的key, 之后利用反射机制实例化对象当作Map中的value
a.数据结构: Map<key,value>, key:bean的id value:对象
b.默认单例模式(Map中同一个key出现两次会覆盖), 对象的生命周期和容器的生命周期相同(和Tomcat或其他服务器生命周期相同)
Spring作用
最新推荐文章于 2023-06-14 19:08:09 发布