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 较多时,程序启动较慢

相关推荐
楽码6 分钟前
在RestFul接口应用Hmac算法
后端·算法·restful
星哥说事8 分钟前
Docker部署开源免费的闲鱼"自动赚钱机器",闲鱼自动回复系统
前端·后端
Archy_Wang_110 分钟前
ASP.NET 上传文件安全检测方案
后端·c#·asp.net
Techie峰20 分钟前
Redis Key过期事件监听Java实现
java·数据库·redis
JosieBook24 分钟前
【SpringBoot】12 核心功能-配置文件详解:Properties与YAML配置文件
java·spring boot·后端
noravinsc33 分钟前
django 如何读取项目根目录下的文件内容
后端·python·django
懒得更新34 分钟前
Go语言类型安全编程实战指南
后端·go
bobz96535 分钟前
华为 MLAG 和堆叠的区别
后端
语落心生37 分钟前
Apache Doris 3.0 存算一体架构:从原理到实践的深度解析
后端
inhere37 分钟前
gookit/goutil v0.7.1 发布:增强工具集与使用优化
后端·go·github