Spring 注入、注解及相关概念补充

一、Spring DI 的理解

DI ( Dependency Inject,中文释义:依赖注入 )是对IOC 概念 不同角度的描述,是指应用程序在运行时,每一个 bean 对象都依赖 IOC 容器注入到当前 bean 对象所需要的另一个 bean 对象。(例如:在 Mybatis 整合 Spring 时,SqlSessionFactoryBean 依赖 IOC 容器注入一个 DataSource 数据源 Bean )

二、Spring 的 Bean 是什么?

简单来说,Bean 代表被 IOC 容器管理的对象;我们通过配置文件或注解,告诉 IOC 容器帮助我们管理哪些对象。

XML 复制代码
<bean id="..." class="...">
    <constructor-arg value="...">
</bean>

三、Spring 框架中的常见注入方法有几种?

Spring IOC 的常见注入方法有3种:Setter注入、构造注入属性注入

(1)Setter注入

使用Setter 方法注入 Bean

(2)构造注入

使用构造方法 注入 Bean

(3)属性注入

使用 成员属性 注入 Bean,不推荐。原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠 IOC 容器实现注入,不严谨。

四、Spring 中常见的 ApplicationContext 实现类有哪些?

(一)ClassPathXmlApplicationContext

根据类路径 classpath 下的配置文件加载 bean

(二)FileSystemXmlApplicationContext

根据当前磁盘的一个绝对路径下的配置文件加载 bean

(三)AnnotationConfigApplicationContext

根据读取到的注解加载 bean

(四)WebApplicationContext

web 容器下按照配置文件加载 bean

五、Spring 框架注解有哪些?

用于声明 Bean 的注解:

|-------------|-------------------------------------------------------|
| @Component | 定义通用 Bean 的注解,可标注任意类为 Bean,若一个 Bean 不知道属于哪一层,可使用该注解标注 |
| @Repository | 定义数据访问层 Bean 的注解 |
| @Service | 定义业务层 Bean 的注解 |
| @Controller | 定义控制层 Bean 的注解 |

用于注入的注解:

|------------|---------|
| @Autowired | 按类型自动注入 |
| @Qualifier | 按名称自动注入 |

声明配置、扫描、启动特性的注解:

|-------------------------|----------|
| @Configuration | 声明配置类 |
| @ComponentScan | 组件扫描 |
| @EnableScheduling | 启动任务调度 |
| @EnableAspectJAutoProxy | 启动自动代理工厂 |

六、@Component 和 @Bean 的区别?

|-------|---------------------------------------------|----------------------------------------------------------|
| | @Component | @Bean |
| 注解作用于 | 类 | 方法 |
| 方式 | 通常通过类路径扫描来实现自动扫描并完成装配 Bean 到 Spring IOC 容器中 | 通常用于注解某个方法,通过 @Bean 注解告诉了Spring IOC 容器,该方法的返回值实例是一个 Bean |

七、@Autowired 和 @Resource 的区别是什么?

|--------|-----------------|-----------------|
| | @Autowired | @Resource |
| 提供方 | Spring 提供的注解 | JDK 提供的注解 |
| 默认注入方式 | byType(按类型自动注入) | byName(按名称自动注入) |

八、BeanFactory 和 ApplicationContext 区别?

两者之间的关系:

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

两者区别与不同:

BeanFactory 是 Spring 里面最底层的接口,是 IOC 的核心,定义了 IOC 的基本功能,包含了各种 Bean 的定义、加载、实例化、依赖注入生命周期管理等行为。

ApplicationContext 接口作为 BeanFactory 接口的子接口,包含 BeanFactory 所具备的功能外,还提供了其它框架功能:继承 MessageSource(支持国际化)、资源文件访问、可以同时加载多个配置文件、可以通过监听器管理 Bean 的生命周期。

Bean 的创建加载方式:

BeanFactory 采用的是延迟加载形式来注入 Bean ,只有在使用到某个 Bean 时,才会对该 Bean 进行加载实例化。这样不能提前发现一些存在的 Spring 的配置问题。若 Bean 的某一个属性没有注入, BeanFactory 加载后,直至第一次使用调用 getBean() 方法才会抛出异常

ApplicationContext 是在容器启动时,一次性创建了所有的 Bean。这样,在容器启动时,我们就可以发现 Spring 中存在的配置错误,这样有利于检查所依赖属性是否注入。ApplicationContext 启动后预载入所有的单实例 Bean ,所以在运行时速度比较快,因为它们已经创建好了。相对于 BeabFactory ,ApplicationContext 唯一的不足是占用内存空间,当应用程序配置 Bean 较多时,程序启动较慢

相关推荐
布局呆星5 小时前
SpringBoot 基础入门
java·spring boot·spring
mldong5 小时前
Python开发者狂喜!200+课时FastAPI全栈实战合集,10大模块持续更新中🔥
后端
风吹迎面入袖凉5 小时前
【Redis】Redisson的可重入锁原理
java·redis
w6100104665 小时前
cka-2026-ConfigMap
java·linux·cka·configmap
GreenTea6 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
语戚6 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
quxuexi6 小时前
网络通信安全与可靠传输:从加密到认证,从状态码到可靠传输
java·安全·web
hrhcode7 小时前
【java工程师快速上手go】二.Go进阶特性
java·golang·go
Moment8 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试