spring学习记录

l 1.对AOP的理解
AOP面向切面是oop思想的一种延伸,将一些与业务无关却又重复的逻辑和行为抽象为一个统一的模块,提高代码复用性和简化管理,如平时的日志和审计等等。

我们平时接触到的有两种,一种是spring aop 和aspectj。spring的过滤器和拦截器是spring aop的一种实现,上一个项目中使用到统计接口调用情况的代码是使用aspectj+注解实现的。

相对于spring aop,aspectj支持更加丰富的joinpoints切入点,并且性能要优于spring aop。另外一个特点就是,aspectj是静态代理,编译时织入增强,而spring aop 则是运行时增强。

spring aop使用的两种动态代理,一种是jdk,还有一种是cglib,jdk需要对象实现了对应接口,而cglib需要对象不是final修饰的。

2、aspectj概念

  • 连接点,理论上所有的方法都是连接点,还未被增强、
  • 切入点,被增强的方法
  • 通知,增加的方式,环绕通知,前通知,后通知,异常后通知,返回通知
  • 切面 = 切入点 + 通知
  • 织入,增抢的过程
  • target ,被增强的目标类
  • proxy 增强的代理类

3、IOC和DI

  • IOC控制翻转,是将对象的控制权交给spring管理,在开发过程中我们使用一个对象不再需要自己去new,而是spring主动去创建。比如说在service层中需要一个dao层对象获取数据库数据,一般使用注解声明即可。
  • DI依赖注入,个人理解为spring在主动提供一系列对象时,这些对象有时需要带有初始化好的属性。
  • 三种注入方式:1、构造器注入,2、setter注入,3、注解注入

4、BeanFactory和ApplicationContext
ApplicationContext是BeanFactory的一个子接口,都可以做spring的bean容器。ApplicationContext在BeanFactory的基础上扩展了一些框架的功能,例如国际化,Bean监听等功能。BeanFactory是懒加载的,在getBean的时候才回去创建,而ApplicationContext是一次性加载的,所以在程序启动时就能看到哪些bean加载失败。

5.Bean的生命周期

  • 初始化bean
  • 依赖注入
  • 如果bean实现了Aware接口,bean中会包含对应aware实例
  • 如果bean实现了beanPostProcessor会执行initBefore方法
  • 如果bean有init-method方法,则执行
  • 如果bean实现类beanPostProcessor会执行initAfter方法
  • 如果bean实现了DisableBean接口则执行 destroy方法
  • 最后执行destroy-method方法

6.类加载机制

类加载分为一下就一个过程

  • 加载二进制文件或者jar
  • 检验是否符合jvm规范
  • 准备阶段分配内存空间
public static int value= 123 ; //变量value在准备阶段过后的初始值是0,不是123.
public static final int value = 123 ; //特殊情况:会生成ConstantValue属性,初始值是123.

  • 解析,符号引用转直接引用
  • 初始化阶段赋值

7、破坏双亲委托加载模型
Thread.concurrentThread().setClassLoader()

  • bootStrap classLoader
  • 扩展类加载器
  • 应用类加载
  • 自定义加载器实现ClassLoader接口

8.springmvc请求流程
DispatcherServlet收到http请求

  • 根据请求和HandlerMapping获取执行器链,执行器链中包括拦截器和Handler
  • 然后根据获取到的Handler拿到Handler Adapter。
  • 在执行handler执行先正序遍执行器链中的拦截器,如果返回false则直接结束
  • handlerAdapter执行Handler放回一个ModelAndView
  • 拦截器链倒序遍历连接器链执行
  • 渲染ModelAndView

9.Filter和Interception执行顺序
在这里插入图片描述
filter基于函数回调,Interception基于反射,原则上拦截器动能强于过滤器

10.spring和springmvc的启动

  • spring的启动,web.xml中的ContextLoaderListener监听到启动事件启动Spring,初始化spring的上下文,接着初始化DispatcherServlet也就是SpringMvc的上下文,springMvc会把spring的上下文作为父上下文

  • springmvc的启动流程
    springmvc的init由三个类实现
    在这里插入图片描述

    • HttpServletBean重写了init方法,这里会初始化配置文件或者javaConfig中的init-param
    • 接着FrameworkServlet初始化上下文
    • 最后DispatcherServlet初始化Springmvc的组件

11.spring的事务

  • 事务的传播 默认为当前如果没有事务则开启一个新的事务,如果有则加入当前事务
  • 事务的隔离级别
    • read-uncommitted 一个事务会读取到另外一个事务未提交的结果
    • read-committed 一个事务中前后读取同一份数据可能出现不同结果
    • repeatable-read 可能会出现虚读或者幻读,虚读注重于结果前后的差异,幻读注重于增删操作
    • 串行化
  • spring的两种实现形式
    • 声明式事务,基于注解
    • 编程式事务

12 spring中有哪些事件

  • 上下文开始事件
  • 上下文更新事件
  • 上下文停止事件
  • 上下文关闭事件
  • 处理web请求结束事件

13 在Mybatis中,mapper接口里的方法能不能被重载

  • 不能被重载,mybatis通过jdk的动态代理执行对应方法,而该方法是通过全限定名+方法名保存的,如果重载会导致结果有多个,发生错误

14、mybatis的执行流程

  • SqlsessionFactoryBuilder构建一个SqlSessionFactory
  • SqlSessionFactory.openSession()
  • 执行crud操作

15、mybatis的延迟加载
只对一对一或者一对多情况下有用,一对一使用 association标签,一堆多使用Collection标签
为null时会发起另一次查询

16、mybatis的一二级缓存
一级缓存是session级别的,二级缓存是NameSpace级别的,spring集成mybatis时,二级缓存默认不开启
不建议开启二级缓存的原因是,多表查询情况下会涉及多个namespace,开销大。

17、什么是springboot
springboot是一个能简化配置,快速开发的框架,能避免复杂的配置提高开发效率,能较好的解决依赖冲突,统一管理的javaConfig等。

18,、springboot的自动装配原理
在main方法所在类上的注解@SpringBootApplication中的一个关键注解@EnableAutoConfigration,此注解也是有几个注解组合中,其中的@Import注解中一个XXXselectors类会扫描所有jar的中factoris.properties文件,文件中配置的都是javaConfig配置类,根据一些@ConditionOnXX注解判断是否加载后完成自动装配

19、springboot的配置执行顺序
前面的会覆盖后面的

  • SpringBootTest中配置的值
  • javaConfig中的值
  • 应用程序设置的系统参数,System.set
  • 自定义的properties或者yml文件
  • jar包里的properties或者yml文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值