Spring面试(二)

本文介绍了AOP的核心概念,如切面、通知和代理类型(JDK与CGLIB),重点阐述了SpringAOP的特点和Spring事务管理的两种方式。同时讨论了SpringMVC组件及其工作流程,SpringBoot的优点及自动配置原理,并简要涉及了微服务架构和SpringCloud的相关知识。
摘要由CSDN通过智能技术生成

1.什么是AOP

AOP:面向切面编程。简单说就是把一些业务逻辑中相同的代码抽取到一个独立的模块中,让业务代码清晰。
AOP的核心就是动态代理,如果是实现了接口的话会使用JDK动态代理,否则使用CGLIB代理,主要应用处理一切具有横切性质的系统级服务,如日志收集,事务管理,安全检查、缓存,对象池管理等。

AOP那些核心观念:

  • 切面:类是对物体特征的抽象,切面就是横切关注点的抽象
  • 连接点:在Spring中指的就是拦截到的方法,实际连接点还可以是字段或者构造器。
  • 切点:对连接点进行拦截的定位。
  • 通知:所谓通知就是指的是拦截到连接点后要执行的代码,也可以叫做增强。
  • 目标对象:代理的目标对象
  • 织入:织入就是将增强添加到目标类的具体连接点上的过程。
  • 引介:引介是一种特殊的增强,可以动态的为类增加一些属性和方法

2.AOP的那些环绕方式

  • 前置通知(@Before)
  • 返回通知(@AfterReturning)
  • 异常通知(@AfterThrowing)
  • 后置通知(@After)
  • 环绕通知(@Around)
    多个切面的情况下,可以通过@Order指的先后顺序,数字越小,优先级越高。

3.说说JDK动态代理和CGLIB代理

Spring的AOP是通过动态代理来实现的,动态代理主要分为Jdk动态代理和CGLIB动态代理。

JDK动态代理:

  1. Interface:对于jdk动态代理,目标类需要实现一个Interface
  2. IncocationHandler:是一个接口,可以通过实现这个接口,定义横切逻辑,在通过反射机制调用目标类的代码,在次过程,可能包装逻辑,对目标方法进行前置后置处理。
  3. Poxy:Proxy利用InvocationHandler动态创建一个符合目标类实现的接口实例,生成目标类的代理对象

Cglib动态代理

  1. 使用JDk创建代理有一大限制,他只能为接口创建代理实例,而Cglib动态代理就没有这个限制。
  2. Cglib动态代理是使用字节码处理框架ASm,其原理是通过字节码为类创建一个子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。
  3. Cglib创建的动态代理对象性能比Jdk创建的动态代理对象性能高不少,但是Cglib在创健代理对象时候所花费的时间却比Jdk多的多,所以对于单例的对象因为无需频繁创建对象,使用Cglib合适。反之Jdk动态代理合适

4.Spring Aop的特点

Spring Aop 属于运行时增强,具有一下特点

  1. 基于动态代理实现,默认使用接口的用Jdk提供的动态代理
  2. Spring AOP需要依赖IOC容器来管理,并且只能用于Spring容器,使用纯Java代码实现
  3. Spring AOP 致力于解决企业家开发中最普遍的AOP(方法织入)
    在这里插入图片描述

5.Spring 事务的种类

Spring 支持编程式事务管理和事务管理两种方式。

1.编程式事务
编程式事务管理使用TransactionTemplate,需要显示执行事务

2.声明式事务
声明式事务是建立在AOP上的,本质是通过AOP功能对方法前后进行拦截,优点是不需要再业务逻辑代码中掺杂事务管理的代码,只需要在配置文件中座相关的事务规则声明或者通过@Transactional注解的方式,便可以将事务规则应用到业务逻辑中去,减少业务代码污染,不足的地方就是最细颗粒度只能作用到方法级别,无法像编程式事务那样作用到代码块级别。

6.声明式事务那些情况会失效

在这里插入图片描述

7.Spring MVC的核心组件

  1. DispatcherServlt:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度。降低组件之间的耦合性。
  2. Handler:处理器,完成具体的业务逻辑
  3. HandlerMapping: DispatcherServlet接受请求后,通过HandlerMapping将不同的请求映射到不同的Handler
  4. HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
  5. HandlerExecutionChain:处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。
  6. HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。
  7. ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet
  8. ViewResolver:视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端

8.# Spring MVC的工作流程

在这里插入图片描述

8.SpringMVC Restful的风格接口的流程

我们都知道 Restful 接口,响应格式是 json,这就用到了一个常用注解**:@ResponseBody**
在这里插入图片描述

9.SpringBoot的优点

  1. 可以快速创建独立的Spring应用程序
  2. 内嵌了如Tomcat,jetty和Undertow这样的容器,可以直接跑起来
  3. Springboot无需在向Spring一样使用一堆繁琐的xml文件进行配置
  4. SpringBoot 可以自动配置Spring,Springboot将原有的xml配置改为java配置,将bean注入更改为使用注解方式,并且将多个xml、propreties配置浓缩为一个Application.xml配置文件中
  5. Spring boot 提供了一些现有的功能,如表单数据验证,以及三方功能
  6. 可以快速整合常用的依赖开发库,提供了POM可以简化Maven的配置,当我们引入核心依赖时候,Springboot会自动引入其他的依赖。

10.Springboot 自动配置原理

Springboot开启自动配置原理的注解是@EnableAutoConfiguration,启动类上的注解是SpringbootApplication,是一个复合注解,包含了EnableAutoConfiguration

  • EnableAutoConfiguration 只是一个简单的注解,自动装配核心功能的实现实际是通过
    AutoConfigurationImportSelector 类

11. Springboot 启动原理

  1. 推断应用是普通项目还是Web项目
  2. 查找bong加载所有可用初始化器,设置到initializers属性中
  3. 找出所有的应用程序监听器,设置到listeners属性中
  4. 推断并设置main方法定义类,找到运行的主类。
    在这里插入图片描述

12.对 SpringCloud 了解多少?

什么是微服务

  1. 2014 年Martin Fowler 提出的一种新的架构形式。微服务架构是一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间相互协调,互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制(如 HTTP 或 Dubbo)互相协作,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具(如 Maven)对其进行构建。
  2. 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己独立的数据库。

微服务架构主要要解决哪些问题?
3. 服务很多,客户端怎么访问,如何提供对外网关?
4. 这么多服务,服务之间如何通信? HTTP 还是 RPC?
5. 这么多服务,如何治理? 服务的注册和发现。
6. 服务挂了怎么办?熔断机制

有哪些主流微服务框架?

  1. Spring Cloud Netflix
  2. Spring Cloud Alibaba
  3. SpringBoot + Dubbo + ZooKeeper
  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值