Spring spring

Spring中文网站 > Spring Security > Spring Bean依赖注入要引入哪个包 Spring中Bean的生命周期详解
Spring Bean依赖注入要引入哪个包 Spring中Bean的生命周期详解
发布时间:2026/09/20 16:35:35

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

我们在学Spring开发的时候,依赖注入几乎是绕不开的知识点。有不少用户在上手的时候不确定做依赖注入到底该引入哪个包,@Autowired和@Resource虽然都能用,来源却不一样,混用起来容易出问题。学习Bean的生命周期也是理解Spring框架的关键,面试的时候也经常会被问到,一个Bean从被框架发现到最终销毁,中间经历的阶段并不少。下面就给大家介绍一下Spring Bean依赖注入要引入哪个包,Spring中Bean的生命周期详解的相关内容。

一、Spring Bean依赖注入要引入哪个包

我们在做依赖注入的时候经常会用到@Autowired注解,有时候也会用到@Resource,这两个注解虽然都能实现注入的效果,但是引入的包不一样。@Autowired是Spring框架自己定义的注解,来自spring-context这个依赖包,具体的包路径是org.springframework.beans.factory.annotation.Autowired。

@Autowired包路径
图1:@Autowired包路径

如果我们项目用的是Spring Boot,pom.xml里只要引入了spring-boot-starter这个基础依赖,spring-context就已经包含在里面了,不需要单独再加,直接在代码里import对应路径就能用。

spring-boot-starter
图2:spring-boot-starter

@Resource是Java EE规范里的注解,来自javax.annotation这个包,完整路径是javax.annotation.Resource,在JDK8及之前的版本里,这个包是JDK自带的,不需要额外引入依赖。但从JDK9开始模块化之后,javax.annotation从默认可用的模块里移出去了。如果项目用的是JDK9以上版本,我们想用@Resource的话就需要在pom.xml里手动加一个jakarta.annotation-api的依赖。

引入@Resource注解
图3:引入@Resource注解

这两个注解在注入方式上也有区别,@Autowired默认按类型匹配Bean,如果容器里同类型的Bean有多个,需要配合@Qualifier指定名称。@Resource默认先按名称匹配,找不到再按类型,相对来说歧义少一些。实际我们开发的时候用哪个都行,但是建议在一个项目里保持统一,别混着用。

二、Spring中Bean的生命周期详解

面试的时候经常会被要求说一说Bean的生命周期,它指的是一个Bean从被Spring容器创建到最终销毁的完整过程,如果我们能搞清楚每个阶段在做什么,很多框架行为就不难理解了。

容器通过反射调用构造方法把Bean对象创建出来,这时候的Bean只是一个普通的Java对象,里面的属性还没有赋值,容器把配置里声明的依赖注入进来,@Autowired和@Resource标注的字段在这个阶段完成赋值。

注入Bean实现赋值
图4:注入Bean实现赋值

属性填充完之后进入初始化阶段,如果Bean实现了BeanNameAware或者BeanFactoryAware这类Aware接口的话,容器会先调用对应的set方法把框架信息传进去。

接着BeanPostProcessor的前置处理方法会被触发,然后@PostConstruct标注的方法开始执行,再之后如果实现了InitializingBean接口,afterPropertiesSet方法会被调用,接着才是xml里配置的init-method。

实现Aware
图5:实现Aware

初始化完成之后Bean就进入正常使用状态,由容器持有,一直到需要销毁的时候会先执行@PreDestroy标注的方法,然后是DisposableBean接口的destroy方法,接着是配置的destroy-method。

三种销毁方式
图6:三种销毁方式

以上就是Spring Bean依赖注入要引入哪个包,Spring中Bean的生命周期详解的全部内容了。依赖注入选包的时候要提前搞清楚@Autowired和@Resource各自的来源,这样遇到import报错也不慌了。Bean的生命周期链路稍微长一点,从实例化到属性填充,再到各个初始化钩子依次触发,然后一直到销毁,每个阶段都有对应的扩展点可以介入。我们把这些底层逻辑理清楚,调试框架问题的时候心里会踏实很多。

 

180 1563 6924