螺竹编程
发布于 2024-05-19 / 4 阅读
0

Java面试题/后端框架:Spring Framework面试题

基础

什么是Spring Framework?

Spring Framework是一个开源的Java应用程序框架,提供了一种全面的编程和配置模型,用于构建现代化的企业级应用程序。

Spring Framework的核心特点是什么?

  1. 轻量级和非侵入性:Spring Framework通过IoC(控制反转)和AOP(面向切面编程)来实现松耦合和可维护性。

  2. IoC容器:Spring Framework提供了一个容器,负责实例化、配置和管理应用程序中的对象。

  3. AOP支持:Spring Framework支持面向切面编程,用于处理横切关注点,如日志记录、事务管理等。

  4. 声明性事务管理:Spring Framework提供了声明性事务管理的支持,简化了管理数据库事务的流程。

  5. 综合的MVC框架:Spring Framework提供了一个灵活且可扩展的MVC框架,用于构建Web应用程序。

什么是控制反转(IoC)和依赖注入(DI)?

控制反转是一种软件设计原则,它将对象的创建和依赖关系的解析转移到容器中,而不是在对象内部进行。依赖注入是控制反转的一种实现方式,通过容器将依赖关系注入到对象中。

Spring Framework中的AOP是什么?它的作用是什么?

AOP(面向切面编程)是Spring Framework的一个重要特性,用于处理系统中的横切关注点。通过AOP,可以将与业务逻辑无关的功能(如日志记录、事务管理)从应用程序的核心逻辑中分离出来,提高了代码的模块化和可维护性。

Spring Framework中的事务管理是如何实现的?

Spring Framework提供了声明性事务管理的支持。通过在方法或类上添加事务注解(如@Transactional),Spring能够拦截方法调用并处理事务的开始、提交或回滚。

Spring Bean

什么是spring bean?

在Spring Framework中,Bean是由IoC容器实例化、组装和管理的对象。Bean是Spring应用程序的基本构建块,可以通过配置文件或注解来定义。

Spring有哪些配置方式?

  1. 使用XML配置文件:通过在XML配置文件中定义Bean的配置元数据。

  2. 使用注解:通过在类上添加注解(如@Component、@Service)来标识Bean,并使用注解(如@Autowired、@Value)进行依赖注入和属性配置。

  3. 使用Java配置类:通过编写Java配置类,使用特定的注解(如@Configuration、@Bean)来定义和组装Bean。

spring支持几种bean scope?

Spring Bean 支持 5 种 Scope ,分别如下:

  1. Singleton:每个 Spring IoC 容器仅有一个单 Bean 实例。默认

  2. Prototype:每次请求都会产生一个新的实例。

  3. Request:每一次 HTTP 请求都会产生一个新的 Bean 实例,并且该 Bean 仅在当前 HTTP 请求内有效。

  4. Session:每一个的 Session 都会产生一个新的 Bean 实例,同时该 Bean 仅在当前 HTTP Session 内有效。

  5. Application:每一个 Web Application 都会产生一个新的 Bean ,同时该 Bean 仅在当前 Web Application 内有效。

Spring 注解

@Component, @Controller, @Repository, @Service有何区别?

  • @Component :它将 Java 类标记为 Bean 。它是任何 Spring 管理组件的通用构造型。

  • @Controller :它将一个类标记为 Spring Web MVC控制器。

  • @Service :此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component ,因为它以更好的方式指定了意图。

  • @Repository :这个注解是具有类似用途和功能的 @Component 注解的特化。它为DAO提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException 。

@Required注解有什么用?

@Required 注解,应用于 Bean 属性 setter 方法。

  • 此注解仅指示必须在配置时使用 Bean 定义中的显式属性值或使用自动装配填充受影响的 Bean 属性。

  • 如果尚未填充受影响的 Bean 属性,则容器将抛出 BeanInitializationException 异常。

@Autowired注解有什么用?

@Autowired 注解,可以更准确地控制应该在何处以及如何进行自动装配。

  • 此注解用于在 setter 方法,构造函数,具有任意名称或多个参数的属性或方法上自动装配 Bean。

  • 默认情况下,它是类型驱动的注入。

@Qualifier注解有什么用?

当你创建多个相同类型的Bean,并希望仅使用属性装配其中一个Bean 时,您可以使用 @Qualifier 注解和 @Autowired 通过指定 ID 应该装配哪个确切的Bean来消除歧义。

Spring Profile

什么是Spring Profile?

Spring Profile是一种用于定义特定环境配置的机制。通过使用Spring Profile,您可以在不同的环境中使用不同的配置,例如开发环境、测试环境或生产环境。

如何定义Spring Profile?

您可以在Spring配置文件中使用@Profile注解来定义Spring Profile。您可以将@Profile注解应用于类级别或方法级别,以指定特定的Profile应该激活。

如何激活特定的Spring Profile?

可以通过多种方式激活Spring Profile:

  • 在应用程序启动时,可以使用spring.profiles.active属性来指定要激活的Profile。例如,可以通过命令行参数-Dspring.profiles.active=dev来激活名为"dev"的Profile。

  • 在应用程序的配置文件中,可以使用spring.profiles.active属性来指定要激活的Profile。例如,在application.propertiesapplication.yml文件中添加spring.profiles.active=dev来激活名为"dev"的Profile。

如何在Spring Boot应用程序中使用多个Profile配置文件?

Spring Boot支持根据激活的Profile自动加载相应的配置文件。您可以创建多个配置文件,每个文件与一个Profile相关联。命名约定是application-{profile}.propertiesapplication-{profile}.yml,其中{profile}是Profile的名称。Spring Boot会根据激活的Profile自动加载相应的配置文件。

如何在代码中根据Profile进行条件化配置?

您可以使用@ConditionalOnProfile注解来根据Profile进行条件化配置。这个注解可以应用于类级别或方法级别。使用@ConditionalOnProfile("dev"),可以指定只有在名为"dev"的Profile激活时,才应用相应的配置。

如何在测试中使用Spring Profile?

在测试中,您可以使用@ActiveProfiles注解来指定要激活的Profile。例如,@ActiveProfiles("test")将激活名为"test"的Profile。这样,您可以为不同的测试场景定义不同的Profile,并使用相应的配置。