Spring基础面试总结

x33g5p2x  于2022-03-18 转载在 Spring  
字(2.2k)|赞(0)|评价(0)|浏览(424)

简单介绍一下Spring

Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。
Spring有如下优点:

  • Spring属于低侵入式设计,代码的污染极低;
  • Spring的控制反转将对象之间的依赖关系交由框架处理,减低组件的耦合性;
  • Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用;
  • Spring对于主流的应用框架提供了集成支持。

Spring中bean的作用域

  • singleton:默认作用域,单例bean,默认情况下每个容器只自动生成该类型的一个bean实例
  • prototype:为每一个bean请求创建一个实例,多实例bean
  • request:为每一个request请求创建一个实例,在请求完成以后,bean会被垃圾回收器回收
  • session:与request范围类似,同一个session会话共享一个实例
  • global-session:全局作用域,所有会话共享一个实例

说一下你对AOP的理解?

AOP,即面向切面编程。通过预编译和运行期动态代理的方式来实现对程序功能的统一增强和维护。
AOP底层是基于动态代理的,动态代理方式分为两种:JDK动态代理和CGLIB动态代理。
而spring实现AOP究竟用用哪一种代理方式?取决于被代理的类是否实现了接口。
如果实现了接口则默认使用JDK动态代理,如果没有实现任何接口,则只能使用cglib动态代理

1. JDK动态代理:
JDK动态代理是为接口生成代理对象。要求被代理的类必须实现一个接口。它的核心是InvocationHandler接口和Proxy类。
2. CGLIB动态代理:
底层是 代理类继承于初始类
代理类中增加一个成员变量target指向之前的实例化对象
代理类重写初始类的方法(代理逻辑 + target的对应方法)

AOP几个应用场景:

  1. 用于日志打印
  2. 返回值统一处理
  3. 用于全局异常处理拦截
  4. Spring中的事务

说一下AOP里面的几个名词的概念

  • 连接点(Join point):指的就是程序运行时要执行的方法。一个连接点就表示一个方法的执行。
  • 切点(Pointcut):切点用于定义要对哪些连接点(Join Point)进行拦截
  • 通知(Advice): 指的是要在连接点(Join Point)上执行的动作,即增强逻辑。
  • 切面(Aspect):指被抽取出来的公共模块儿,可以用来横切多个对象。切面可以看成是切点(Pointcut)和通知(Advice)的组合。

Spring通知(Advice)有哪些类型?

  • 前置通知:在连接点之前执行的通知
  • 后置通知:在连接点退出时执行的通知(无论是正常执行完成还是异常退出)
  • 返回后通知:连接点正常完成后执行的通知
  • 抛出异常后通知:连接点抛出异常退出时执行的通知
  • 环绕通知:最强大的通知类型。环绕通知可以在连接点执行前后完成自定义的行为。它可以选择是否继续执行连接点或直接返回他们自己的返回值或者抛出异常来结束执行

BeanFactory和ApplicationContext有什么区别?

首先BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。

  1. BeanFactory是Spring里面最底层的接口,是IoC的核心,定义了IoC的基本功能,包含了各种Bean的定义、加载、实例化,依赖注入和生命周期管理;ApplicationContext接口作为BeanFactory的子类,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:支持国际化、支持资源文件访问、支持载入多个上下文等
  2. BeanFactroy采用的是懒加载形式来注入Bean,只有用到某个bean时才会去创建这个bean;ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。

@Autowired注解与@Resource注解的区别

区别

  • 提供方不同:@Autowired属于spring框架的注解;而@Resource属于jdk的注解。
  • 注入方式:@Autowired只能按照类型注入,如果存在同一类型的多个bean,则可以结合@Qualifier来指定bean的名称进行注入;@Resource默认是按照byName自动注入,也提供了byType注入。
  • 属性:@Autowired默认情况下要求依赖的对象必须存在,如果想要允许为null值,可以设置它的required属性为false; @Resource有两个重要的属性:name和type,name属性指定bean的名称,type属性用来指定bean的类型。

SpringBoot和SpringCloud的区别和关系?

  • SpringBoot专注于快速方便的开发单个个体微服务
  • SpringCloud是关注全局的微服务协调整理治理架构,它将SpringBoot开发的一个个单体微服务整合并管理起来。为各个微服务之间提供配置管理、服务发现、断路器、路由、网关等集成服务
  • SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系

相关文章