Spring面试知识点

本文深入探讨了Spring框架的核心特性,包括IOC容器的BeanFactory和ApplicationContext,以及Bean的定义、作用域和生命周期管理。详细阐述了依赖注入的两种方式:构造函数和设值函数注入,并介绍了自动装配的概念。此外,文章还覆盖了基于注解的配置,如@Required、@Autowired和@Qualifier的使用,以及基于Java的配置和事件处理。AOP方面的内容包括基于XML和@AspectJ的切面编程。最后,简要讨论了Spring的JDBC支持、事务管理和MVC框架的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:ioc容器-将对象的创建权交给 Spring 去创建

1.1 容器

1.1.1 BeanFactory

最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持

1.1.2 ApplicationContext

加载配置文件中定义的 bean和从属性文件中解析文本信息和将事件传递给所指定的监听器等

1.1.3 bean

1.1.3.1定义

  • 基于 XML 的配置文件
  • 基于注解的配置
  • 基于 Java 的配置

1.1.3.2作用域

1.1.3.3生命周期

Bean的生命周期可以表达为:Bean的定义——Bean的初始化( init-method)——Bean的使用——Bean的销毁(destroy-method

如果你有太多具有相同名称的初始化或者销毁方法的 Bean,那么你不需要在每一个 bean 上声明初始化方法销毁方法。框架使用 元素中的 default-init-methoddefault-destroy-method 属性提供了灵活地配置这种情况

1.1.3.4后置处理器

Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理。--BeanPostProcessor

1.1.3.5定义继承

bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。

子 bean 的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值

2:依赖注入-依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值

2.1基于构造函数的依赖注入

当容器调用带有一组参数的类构造函数时,基于构造函数的 DI 就完成了,其中每个参数代表一个对其他类的依赖。

2.2 基于设值函数的依赖注入

当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了。

2.3 注入内部 Beans

2.4 注入集合

3:自动装配

在 XML 配置文件中 beans 的 autowire 属性设置为 ??

3.1 自动装配 byName

3.2 自动装配 byType

3.3 由构造函数自动装配constructor

4:基于注解的配置

4.1 @Required

@Required 注解应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。

4.2 @Autowired

使用 Spring 开发时,进行配置主要有两种方式,一是 xml 的方式,二是 java config 的方式。

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。 一般@Autowired和@Qualifier一起用,@Resource单独用。

4.3 @Qualifier

当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注解和 @Autowired 注解通过指定哪一个真正的 bean 将会被装配来消除混乱。

4.4 JSR-250 注释

Spring还使用基于 JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。

使用 @PostConstruct 注释作为初始化回调函数的一个替代,@PreDestroy 注释作为销毁回调函数的一个替代

4.5 基于 Java 的配置

带有 @Configuration 的注解类表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源。@Bean 注解告诉 Spring,一个带有 @Bean 的注解方法将返回一个对象,该对象应该被注册为在 Spring 应用程序上下文中的 bean。

4.6 事件处理

5:AOP框架-面向切面编程

5.1 基于 AOP 的 XML架构

5.2 基于 AOP 的 @AspectJ

5.2.1 @Aspect声明

5.2.2 @Pointcut("execution(* com.xyz.myapp.service.*.*(..))") // expression

5.2.3 @Before("businessService()") , After, AfterReturning, Around

6:JDBC框架

Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。

JdbcTemplate 类-执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值

6.1 配置数据源

6.2 数据访问对象(DAO)

取数据并将数据写入到数据库

6.3 执行 SQL 语句

6.4 执行 DDL 语句

7:事务管理

ACID:原子性、一致性、隔离性、持久性

  • 使用 begin transaction 命令开始事务。
  • 使用 SQL 查询语句执行各种删除、更新或插入操作。
  • 如果所有的操作都成功,则执行提交操作,否则回滚所有操作。

7.1 局部事务(单一的事务资源) vs. 全局事务(一个分布式系统中的事务)

7.2 编程式 vs. 声明式

(1)编程式事务管理方法允许你在对你的源代码编程的帮助下管理事务。这给了你极大地灵活性,但是它很难维护。
(2)声明式事务管理方法允许你在配置的帮助下而不是源代码硬编程来管理事务。这意味着你可以将事务管理从事务代码中隔离出来。你可以只使用注释或基于配置的 XML 来管理事务。 bean 配置会指定事务型方法。

7.3 Spring 事务抽象-隔离级别、传播行为、是否只读、事务超时、回滚规则

8:MVC

8.1 DispatcherServlet处理所有的 HTTP 请求和响应

8.2 需求的配置

映射你想让 DispatcherServlet 处理的请求,通过使用在 web.xml 文件中的一个 URL 映射

8.3 定义控制器

DispatcherServlet 发送请求到控制器中执行特定的功能。@Controller 注释表明一个特定类是一个控制器的作用。@RequestMapping 注释用于映射 URL 到整个类或一个特定的处理方法。

8.4 创建 JSP 视图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值