Java面试整理(五)框架

框架知识考点

SpringIOC的应用

在这里插入图片描述

Spring IOC支持的功能

  • 依赖注入
  • 依赖检查
  • 自动装配
  • 支持集合
  • 指定初始化方法和销毁方法
  • 支持回调方法

SpringIOC的核心接口

  • BeanFactory:Spring框架最核心的接口,相当于汽车发动机;
    • 提供IOC的配置机制;
    • 包含Bean的各种定义,便于实例化Bean;
    • 建立Bean之间的依赖关系;
    • Bean生命周期的控制
  • ApplicationContext,相当于包含发动机在内的轮胎,底盘等构成车的基本组件
    • 继承BeanFactory:能够管理、装配Bean
    • ResourcePatternResolver:能够加载资源文件
    • MessageSource:能够实现国际化等功能;
    • ApplicationContext:能够注册监听器,实现监听机制;
BeanFactory与ApplicationContext的比较
  • BeanFactory是Spring框架的基础设施,面向Spring;
  • AppcationContext是面向Spring框架的开发者;(设施比较完全)
    在这里插入图片描述
BeanDefinition
  • 主要用来描述Bean的定义
    在这里插入图片描述
BeanDefinitionRegistry

提供向IOC容器注册BeanDefinition对象的方法;

getBean方法的代码逻辑

  • 转换beanName;
  • 从缓存中加载实例;
  • 实例化Bean;
  • 检测parentBeanFactory;
  • 初始化依赖的Bean;
  • 创建Bean;

Spring Bean的作用域

  • singleton: Spring的默认作用域,容器里拥有唯一的Bean实例;
  • prototype: 针对每个Bean的请求,容器都会创建一个Bean实例;
  • request: 针对每一个request请求,都会创建一个Bean实例;
  • session: 会为每个session创建一个Bean实例;
  • globalSession: 会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效;

Spring Bean的生命周期

创建过程

在这里插入图片描述
1、实例化一个Bean--也就是我们常说的new;
2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;
3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值
4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);
5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);

说下我对3、4、5的理解:
直接对照图的话是对照图里第二步的内容:第二步的目的其实就是为了丰富初始化bean对象的内容,BeanNameAware,BeanFactoryAware,ApplicationContextAware这三个接口其实分别传递了BeanID数据、BeanFactory和ApplicationContext这两个容器对象

6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;
7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。
8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、;

注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。

销毁过程
  • 若实现了DisposableBean接口,则会调用destroy方法;
  • 若配置了destroy-method属性,则会调用其配置的销毁方法;

具体理解:

  • 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;
  • 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

Spring AOP

AOP的三种织入方式

  • 编译时织入: 需要特殊的Java编译器,如AspectJ;
  • 类加载织入:需要特殊的Java编译器,如AspectJ和AspectWerkz;
  • 运行时织入:Spring采用的方式,通过动态代理的方式,实现简单;

AOP的主要名词概念

  • Aspect:通用功能的代码实现;
  • Target:被织入Aspect的对象(被aop的);
  • Join Point:可以作为切入点的机会,所有方法都可以作为切入点;
  • PointCut:切入点,Aspect实际被应用在的Join Point,支持正则;
  • Advice:通知,类里的方法以及这个方法如何织入到目标方法的方式(方法执行之前,执行时候、执行之后?)
  • Weaving:AOP的实现过程;
Advice
  • 前置通知
  • 后置通知
  • 异常通知
  • 最终通知
  • 环绕溶质

AOP的具体实现:JdkProxy和Cglib

  • 由AopProxyFactory根据AdvisedSupport对象的配置来决定;
  • 默认策略如果目标类是接口,则用JDKProxy来实现,否则用后者;
  • JDKProxy的核心:InvocationHandler接口和Porxy类,通过Java的内部反射机制来实现;
  • Cglib:以继承的方式动态生成目标类的代理,借助ASM来实现;
代理模式

接口+真实实现类+代理类

Spring里的代理模式的实现

  • 真实实现类的逻辑包含在了getBean方法里;
  • getBean方法返回的实际上是Proxy的实例;
  • Proxy实例是Spring采用JDK Proxy或者CGlib动态生成的;

Spring、SpringMVC、SpringBoot、SpringCloud有什么区别和联系

  • Spring
    • Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架;
  • SpringMVC
    • SpringMVC是Spring的一个模块、一个Web框架。通过DispatcherServlet、ModelAndView和ViewResolver,开发web应用变得容易。主要针对的是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态web资源等;
  • SpringBoot
    • Spring配置复杂、繁琐,所以推出了Springboot,约定大于配置简化了Spring配置流程;
  • SpringCloud
    • SpringCloud是构建于SpringBoot之上的,重点关注全局的服务治理框架;

总结:

  • Spring是核心,提供基础功能;
  • SpringMVC是基于Spring的一个MVC框架;
  • SpringBoot是为简化Spring配置的快速开发整合包;
  • SpringCloud是构建在SpringBoot之上的服务治理框架;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值