spring aop应用场景_02.面试指南Spring(上)

SpringFramework

文章导读

  • IOC/Bean的生命周期

  • AOP

  • 事务

b11edf59bfe64a55896cc86d5cab0d90.png

面试套路

对于面试官问的各个问题,我们首先要知道面试官问我们这个问题的目的是什么,他想从我这里得到什么答案,比如很多面试官喜欢问spring源码,其实并不是想要我们去背源码,是想我们遇到spring相关的问题时候可以快速的解决。套路分下面三点:

  • 我学习源码的过程是什么样的?

  • 通过学习源码,我解决过项目中的哪些问题

  • 源码的代码风格以及设计模式对我在项目开发中的影响

1.IOC

IOC和Bean的生命周期这两个问题的答案其实是大致一样的,可以按照如下的方式回答。

1.1.IOC的流程

  • 准备过程:结合springboot中的run方法,包括根据异常推断当前应用的类型,将class扫描解析成BeanDefination.

  • 创建过程:这段才算是bean的真正初始化,核心是bean循环依赖的解决方案

    • 循环依赖:采用3种容器来解决,核心思想是提前暴露,初始化对象时只完成构造阶段,赋值后续使用populateBean()方法进行赋值

    • 各种Aware接口的处理:可以对bean做相应的操作,详情见脑图

    • BeanPostProcessor

    • InitializingBean

  • 销毁过程:DisposableBean,可以使用destroy接口完成一些操作

1.2.对应的注解

其实我们想在bean初始化过程中做一些操作,更多的是使用注解的方式。

  • @PostConstruct

  • @ProDestroy

1.3.答题技巧

回答这个问题的时候,首先说明1.1中IOC的流程,这里需要自己去研究一些源码,知道一些核心的方法,这样面试官才会知道你看过源码,之后回答你在项目中是如何处理的,如使用如下两个注解:

  • @PostConstruct:在容器初始化阶段进行一些初始化加载任务,如加载数据字典等,该注解隶属java,不是spring框架提供的

  • @ProDestroy:使用该注解在程序关闭时做了一些操作,如清理缓存等。

谨记要结合自己的项目将spring的一些操融入其中

2.AOP

该题目主要考察是否使用AOP做过一些处理,如统一参数校验,接口耗时处理等

2.1.实现机制

两种实现机制:

  • JDKProxy:必须有接口才能实现,通过生成接口类的实现对象作为代理对象。适合频繁创建对象的场景

  • Cglib:

  • 通过动态的生成一个要代理的子类,并在方法中完成操作的植入。

  • 底层通过ASM修改字节码的方式。

  • 在创建对象过程中效率极低,但是对象创建完成之后效率很高

  • 适合单例或者池化的对象,效率比较高

2.2.AOP与Filter以及Interceptor

  • Filter:

    • 依赖于Servlet容器,利用Java的回调机制进行实现

    • 此处涉及到一个设计模式责任链模式,后面会进行讲解

    • Filter是属于函数回调机制,可以进行鉴权或者设置字符编码等

  • Interceptor:

    • AOP思想,基于java反射机制实现,不依赖servlet容器

    • 页面提交的请求响应并进行处理

    • 只能获取参数的名称,不能获取到参数的值

  • AOP:

  • 只能拦截Spring管理Bean的访问,主要用于业务层

  • 应用场景:日志,事务,请求参数安全验证

3.事务

事务其实就是使用AOP的实现,参考脑图

3.1.事务的隔离级别

3504e5113fdbe25ee0afc200e5560719.png

3.2.事务的传播机制

7eeb2e28bb4db924d5e1cabca120097f.png

回复springframework获取脑图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值