面试准备(Spring)

1、说下你理解的 Spring

  1. 可以从两个方面理解Spring
  2. 一是Spring框架,一个开源的应用框架,提供了 IOC 和 AOP 降低了应用开发的复杂度
  3. 二是Spring全家桶,包括SpringMVC、SpringBoot、Spring Cloud等,是Java应用开发的一站式解决方案,包括对批处理的支持、对 web 的支持、对微服务的支持等

2、Spring 由哪些重要的模块组成

  1. Spring 最主要的核心就是 IOC 容器,这个容器根据我们的配置文件创建了各种 Bean 并且编织它们之间的依赖关系,管理这些 Bean 的生命周期
  2. 所以最核心的代码模块是:
    spring-core:核心类库,包括资源访问等一些工具类,别的模块都会依赖此模块
    spring-beans:对 Bean 的支持,包括控制反转和依赖注入,核心工厂 BeanFacotry 就在这个模块。
    spring-context:Spring 的上下文,支持数据验证、国际化、事件传播等支持,ApplicationContext 就在这里,可以理解为运行时的 Spring 容器。

3、什么是IOC

  1. IOC,即 Inversion of Control,控制反转
  2. IOC 是一种思想,而不是一个具体的技术,其次 IOC 这个思想也不是 Spring 创造的,为了解决对象之间的耦合度过高的问题,运用IOC理论,来实现对象之间的“解耦”
  3. 控制 其实就是控制对象的创建,IOC 容器根据配置文件来创建对象,在对象的生命周期内,在不同时期根据不同配置进行对象的创建和改造
  4. 反转 其实就是关于创建对象且注入依赖对象的这个动作,本来这个动作是由我们程序员在代码里面指定的,例如对象 A 依赖对象 B,在创建对象 A 代码里,我们需要写好如何创建对象 B,这样才能构造出一个完整的 A。
    而反转之后,这个动作就由 IOC 容器触发,IOC 容器在创建对象 A 的时候,发现依赖对象 B ,根据配置文件,它会创建 B,并将对象 B 注入 A 中。
    注入的不一定是一个对象,也可以注入配置文件里面的一个值给对象 A 等等
  5. IOC的好处:对象的创建都由 IOC 容器来控制之后,对象之间就不会有很明确的依赖关系,使得我们非常容易设计出低耦合的程序
  6. DI:Dependency Injection,依赖注入。 DI 是 IOC 的一种实现。其实它跟 IOC 的概念一致,只是从不同角度来描述罢了

4、什么是Bean?

  1. Bean就是对象
  2. 由 Spring 创建的、用于依赖注入的对象,就是 Bean。例如调用 getBean 能返回的东西,就是 Bean

5、BeanFactory 和 ApplicationContext 有什么区别?

  1. BeanFactory是Spring的最底层接口,包含bean的定义,管理bean的加载,实例化,控制bean的生命周期,特点是每次获取对象时才会创建对象
  2. ApplicationContext是BeanFactory的子接口,拥有BeanFactory的全部功能,并且扩展了很多高级特性,每次容器启动时就会创建所有的对象,它还扩展了很多其他功能:
    AOP
    国际化
    资源管理
    事件
    注解 等等
    因此,我们开发直接用的都是 ApplicationContext 而不是 BeanFactory

6、说下 AOP

  1. AOP,Aspect Oriented Programming,面向切面编程
  2. AOP就是通过代理的方式,在调用想要的对象方法时候,进行拦截处理,执行切入的逻辑,然后再调用真正的方法实现。例如,你实现了一个 A 对象,里面有 addUser 方法,此时你需要记录该方法的调用次数。那么你就可以搞个代理对象,这个代理对象也提供了 addUser 方法,最终你调用的是代理对象的 addUser ,在这个代理对象内部填充记录调用次数的逻辑
  3. 实代理大体上可以分为:动态代理和静态代理
  4. 动态代理,即在运行时将切面的逻辑进去,按照上面的逻辑就是你实现 A 类,然后定义要代理的切入点和切面的实现,程序会自动在运行时生成类似上面的代理类
  5. 静态代理,在编译时或者类加载时进行切面的织入,典型的 AspectJ 就是静态代理
  6. Spring AOP 的动态代理实现分别是:JDK 动态代理与 CGLIB。默认的实现是 JDK 动态代理

7、Bean的生命周期

在这里插入图片描述
大致了解生命周期之后,我们再来看详细的操作
在这里插入图片描述
通过构造器或工厂方法创建bean实例;
为bean的属性赋值;
调用bean的初始化方法;
使用bean;
当容器关闭时,调用bean的销毁方法destroy;

8、Spring的常用注解

  1. 包扫描+组件标注注解
    @Component:泛指各种组件
    @Controller、@Service、@Repository都可以称为@Component。
    @Controller:控制层
    @Service:业务层
    @Repository:数据访问层

  2. @SpringBootApplication注解: 在Spring Boot入口类中,唯一的一个注解就是@SpringBootApplication。它是Spring Boot项目的核心注解,用于开启自动配置,准确说是通过该注解内组合的@EnableAutoConfiguration开启了自动配置

  3. @EnableAutoConfiguration注解: @EnableAutoConfiguration的主要功能是启动Spring应用程序上下文时进行自动配置,它会尝试猜测并配置项目可能需要的Bean。自动配置通常是基于项目classpath中引入的类和已定义的Bean来实现的

  4. @Import注解: @EnableAutoConfiguration的关键功能是通过@Import注解导入的ImportSelector来完成的

  5. @RequestMapping
    用于映射web请求,包括访问路径和参数。
    @ResponseBody
    支持将返回值放到response内,而不是一个页面,通常用户返回json数据。
    @PathVariable
    用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。
    @RestController
    该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
    @ControllerAdvice
    全局异常处理
    全局数据绑定
    全局数据预处理

9、Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

  1. 配置变更
  2. JDK 版本升级
  3. 第三方类库升级
  4. 响应式 Spring 编程支持
  5. HTTP/2 支持
  6. 配置属性绑定

10、SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?

  1. 启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
  2. @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  3. @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
  4. @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  5. @ComponentScan:Spring组件扫描。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值