Bootstrap

Spring框架原理面试题及参考答案

目录

什么是Spring 开发框架?

说说Spring 的 IOC 和 DI?

简述IoC(控制反转)及在 Spring 中的实现

说说Spring IOC 容器的基本概念?

说说Spring IoC 的实现机制?

说说Spring IoC 容器?

简述Spring ApplicationContext

说说Spring Bean 的生命周期

说说在 Spring Bean 的生命周期中可扩展的重要方法

说说Spring Bean 的初始化和销毁方法

如何在 Spring 中实现自定义的 Bean 初始化和销毁方法

如何在 Spring 中定义一个 Bean 的作用域

基于 Java 配置类开启注解装配

基于 XML 配置文件开启注解装配

启用自动装配注解

详细说将类声明为 Spring 的 bean 的注解有哪些方式

使用 @Component 及其衍生注解

使用 @Bean 注解

@Service

@Repository

@Configuration

@Bean

详细说 @Component 和 @Bean 的区别

定义位置和方式

作用范围和语义

Bean 的命名方式

依赖注入的灵活性

@Component、@Controller、@Repository、@Service 的区别

@Component

@Controller

@Repository

@Service

说说@Required 注解的作用

说说@Autowired 注解的作用

在属性上使用 @Autowired

在构造函数上使用 @Autowired

在方法上使用 @Autowired

@Autowired 和 @Resource 之间的区别

来源和所属框架

注入方式和匹配策略

可注入的资源类型

@Qualifier 注解的作用

详细讲讲Spring 的自动装配

自动装配的方式

自动装配的实现机制

自动装配的优点

什么是 bean 的自动装配

不同方式的自动装配,spring 自动装配 bean 有哪些方式

按类型自动装配

按名称自动装配

基于构造函数的自动装配

基于 Setter 方法的自动装配

说说使用 @Autowired 注解自动装配的过程

Sping 构造器依赖注入和 Setter 方法注入的区别

注入时机

注入的强制性

可变性

可测试性

解释什么是 Spring Bean 的装配方式

基于 XML 配置文件的装配

基于 Java 配置类的装配

基于注解的自动装配

基于构造函数的装配

基于 Setter 方法的装配

什么是 setter 注入和构造器注入?它们之间有什么区别

setter 注入

构造器注入

两者的区别

Sprint 配置 Bean 的方式

基于 XML 配置文件

基于 Java 配置类

基于注解自动装配

Spring 提供的配置方式有哪些?

XML 配置方式

Java 配置方式

注解配置方式

混合配置方式

Spring 基于 xml 注入 bean 的方式是怎样?

构造函数注入

Setter 方法注入

内部 Bean 注入

Spring 中出现同名 bean 的处理方式

基于 XML 配置

基于注解注入

解决同名 bean 问题的方法?

Spring 的内部 bean

Spring 的 AOP 理解

核心概念

工作原理

优势

Spring AOP 里面的关键词有哪些?

切面(Aspect)

连接点(Join Point)

通知(Advice)

切入点(Pointcut)

目标对象(Target Object)

代理对象(Proxy Object)

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

前置通知(Before Advice)

后置通知(After Advice)

返回通知(After Returning Advice)

异常通知(After Throwing Advice)

环绕通知(Around Advice)

说说Spring 的 Advice 的执行顺序

前置通知(Before Advice)

环绕通知(Around Advice)

后置通知(After Advice)

返回通知(After Returning Advice)

异常通知(After Throwing Advice)

AOP 的定义

Spring 实现 AOP 的方式

创建切面类

定义通知方法

定义切入点表达式

切入点的定义

定义切入点表达式的方式

连接点(Joinpoint)及其与切入点的区别

连接点的定义

与切入点的区别

在 Spring AOP 中使用 @Around 注解实现环绕通知

创建切面类并添加 @Aspect 注解

定义环绕通知方法并添加 @Around 注解

定义切入点表达式

@AspectJ 注解的作用

定义切面类

定义通知方法

定义切入点表达式

Spring AOP 和 AspectJ AOP 的区别

实现方式

功能完整性

性能

开发复杂性

应用场景

声明式的事务管理及 Spring 的实现方式

声明式事务管理的定义

Spring 实现声明式事务管理的方式

Spring 事务的实现方式

Spring 事务的实现原理

Spring 中如何配置事务

解释一下 Spring 事务的隔离级别

如何解决 Spring 事务中的脏读、不可重复读和幻读问题

Spring 事务的传播行为有哪些?分别在什么情况下使用?

什么是 Spring 事务?有哪些特性?

Spring MVC 的请求处理流程是怎样的

模型(Model)与视图(View)在 Spring MVC 中的角色

如何使用 @ModelAttribute 注解进行模型数据绑定

Spring MVC 中如何处理异常

在 Spring MVC 中实现文件上传

什么是视图解析器(ViewResolver)

Spring Boot 的优点

Spring Boot Starter

在 Spring Boot 中实现自动配置

Spring Boot 的配置文件 application.properties 的作用

如何使用 Spring Boot Actuator 监控应用

Spring Boot CLI

在 Spring Boot 中实现自定义的错误页面

在 Spring Boot 中使用 Profiles 管理不同环境的配置

Spring Boot 的自动配置是如何实现的

在 Spring Boot 中进行配置文件的管理

Spring Boot 中的 starter 有什么作用

如何在 Spring Boot 中实现热部署

使用 Spring Boot DevTools

使用 JRebel

配置 IDE 的热部署功能

Spring 如何支持 JDBC 访问数据库

提供统一的异常处理

提供模板类简化操作

支持数据库连接池

提供事务管理支持

解释 Spring 中的 ORM 支持,常见的 ORM 框架有哪些

常见的 ORM 框架

Spring 对 ORM 框架的支持

如何使用 Spring Data JPA 进行数据访问

添加依赖

定义实体类

创建数据访问接口

在业务逻辑中使用数据访问接口

Spring 中如何使用 JdbcTemplate

配置数据源

创建 JdbcTemplate 实例

使用 JdbcTemplate 执行数据库操作

如何在 Spring 中实现数据库的多数据源支持

配置多个数据源

创建多个 JdbcTemplate 实例

确定数据源的使用策略

Spring Security 的主要功能

身份验证

授权

防止跨站请求伪造(CSRF)

会话管理

安全过滤链

集成其他框架

身份验证(Authentication)与授权(Authorization)

身份验证

授权

两者关系

在 Spring 中配置基于表单的登录

依赖配置

配置类创建

表单页面设置

注销配置

解释 @PreAuthorize 注解的作用

如何实现基于角色的访问控制

定义角色

配置用户角色关系

配置安全规则

方法级别权限控制

在 Spring Security 中,如何配置 CSRF 保护

启用 CSRF 保护

生成 CSRF 令牌

验证 CSRF 令牌

排除不需要 CSRF 保护的请求

JDK 动态代理和 CGLIB 动态代理的区别

实现原理

性能方面

适用场景

局限性

DataSource

JdbcTemplate

NamedParameterJdbcTemplate

SimpleJdbcInsert

SimpleJdbcCall

BeanDefinition 的作用

描述 Bean 的基本信息

支持 Bean 的配置和定制

实现 Bean 的懒加载和延迟初始化

支持 Bean 的继承和抽象定义

作为 Spring 容器内部管理的核心数据结构

Bean 实例化中的扩展

自定义实例化逻辑

后置处理器

初始化和销毁方法

工厂方法实例化

基于注解的实例化

JavaBean 和 SpringBean 和对象的区别

JavaBean

SpringBean

对象

三者关系

RequestMapping 注解的作用

映射请求路径

支持多种请求方式


什么是Spring 开发框架?

Spring 是一个开源的 Java 应用程序框架,它为企业级应用开发提供了全面的基础设施支持。其核心特性包括依赖注入(DI)、面向切面编程(AOP)、数据访问抽象以及事务管理等。

</

;