Spring面试复习整理
阅读原文时间:2023年07月08日阅读:4
  1. Spring核心分为三方面:

控制反转(IoC)

就是将创建对象的权利交给框架处理/控制,不需要人为创建,有效降低代码的耦合度,降低了开发成本。

依赖注入(DI)

容器动态地将将某种依赖关系注入到组件中。
三种注入方式: Setter 方式注入(property)、构造方法注入(constructor-org)、注解注入。
注解: @Component、@Service、@Controller、@Resposity

面向切面编程(AOP);

好比将系统按照功能分类,每一个类别就是一个切面,针对不同的切面制定不同规则。
使用场景:日志系统、安全统一校验、拦截器。
优点:集中处理某一类问题,方便维护。降低各个模块的耦合度。

  1. AspectJ 注解说明

    @Before - 前置通知 :在连接点方法前调用。
    @Around - 环绕通知:将覆盖原有方法,允许你通过反射调用原有方法。
    @After - 后置通知:在连接点方法的调用。
    @AfterReturning - 返回通知:在连接点方法执行并正常返回后调用,要求连接点方法在执行过程中没有发生异常。
    @AfterThrowing - 异常通知:当连接点方法异常时调用。

  2. IoC和DI的关系

    DI正是实现IoC的方法和手段。

  3. @Component@Bean有什么区别?

    @Component作用于类,@Bean注解作用于方法。

  4. Spring中bean的作用域有几种类型?

    singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。
    prototype:为每一个bean请求提供一个实例。
    request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收
    session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
    global-session:全局作用域,global-session和Portlet应用相关。

    Spring 默认的是单例模式。

  5. Spring注入方式有哪些?

    Setter方法注入、构造方法注入、注解注入、静态工厂注入、实例工厂注入。

  6. 如何在 Spring 中操作数据库

    可以使用 Spring 提供的 JdbcTemplate 对象,JdbcTemplate 类提供了很多便利的方法比如是数据库数据转变成基本数据类型或对象,执行自定义的 SQL 语句,提供了自定义的数据错误处理。

  7. Spring 有几种实现事务的方式?

    编程式事务和声明式事务。

  8. Spring 的 JdbcTemplate对象和 JDBC有什么区别?

    Spring 的 JdbcTemplate 是对 JDBC API 的封装,提供更多的功能和操作。
    JdbcTemplate 拥有:

    JdbcTemplate 是线程安全的。
    实例化操作比较简单,仅需要传递 DataSource。
    自动完成资源的创建和释放工作。
    创建一次 JdbcTemplate ,到处可用,避免重复可用。

  9. Spring 事务隔离级别有哪些?

    Spring的注入方式有 5 种。

    • 底层数据库的设置隔离级别。
    • 已提交读:一个事务提交后才能被其他事务读取到。
    • 未提交读:最低隔离级别,事务未提交之前,就可以被其他事务读取到。
    • 可重复读:保证多次读取同一数据时,其值和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据
    • 序列化:最高最可靠的隔离级别,能够防止脏读、不可重复读、幻读。
  10. Spring中的 AOP 的底层实现原理是什么?

    Spring AOP的底层实现原理就是动态代理。
    Spring AOP的动态代理有两种实现方式:对于接口使用的是 JDK 自带的动态代理实现的,非接口使用的是 CGLIB 来实现的

  11. Spring的工作原理

    Spring是按照设计模式打造的,实现了工厂模式的工厂类,类名为BeanFactory,程序中通常使用其子类ApplicationContext,Spring的特点就是基于配置,在配置文件里通过元素创建实例对象。

  12. BeanFactory和ApplicationContext有什么区别?

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

  13. Spring中的 Bean 是线程安全的吗?

    Spring 中的 Bean 默认就是单例模式,并非是安全的,
    要想保住 Bean 安全的举措就是设置 Bean 的作用域 Prototype(原型模式),每次请求都新建一个 Bean 。

  14. Spring 有哪些优点?

    开源免费的热门框架,稳定性高。
    方便集成各种优秀的框架。
    降低了代码耦合性,方便程序测试,降低了 Java EE API 的使用难度。

  15. Spring 和 Structs 的区别

    Spring

    • 具有 IoC/DI、AOP 等通用能力,提高了研发效率。
    • 提高了 J2EE 的服务。
    • 能够与不同的技术结合使用,如 Hibernate、MyBatis等。
    • Spring 拦截级别是方法级别。

    Structs

    • 基于 MVC 模式的 Web 层的处理。
    • Struts拦截机制是类级别。
  16. Spring 、SpringBoot、SpringCloud的区别是什么?

    Spring : 见上面
    SpringBoot:快速开发框架,可以迅速搭建一套基于 Spring 的应用程序
    可以集成第三方模块,只需要简单配置,不需要任何 XML 配置文件,默认支持 JSON 格式的数据。
    SpringCloud:整合了分布式应用常用模块的框架,使得开发者可以快速实现微服务应用。

  17. Spring 有哪几种 Java 设计模式?

    • 工厂模式:通过 BeanFactory,ApplicationContext来创建 bean;
    • 单例/原型模式:创建对象(bean)设置作用域。
    • 观察者模式:Spring 可以定义监听器。
    • 责任链模式:AOP拦截器的执行。
    • 策略模式:接口 → JDK自身的动态代理,非接口 → CGLIB动态代理。
  18. spring的优缺点

    优点
    有效的组织中间层对象
    真正意义上实现针对接口编程
    支持JDBC和对象关系映射 ORM
    避免了关键字new造成的耦合问题
    自身就是工厂类,无需在编写工厂类
    不需要明确的引用关系的传递,直接通过配置完成
    对主流的应用框架提供了集成支持
    缺点
    基于大量的xml文件,需要花费太多时间在配置上,拖慢了开发进度