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

相关推荐
程柯梦想1 小时前
Maven修改默认编码格式UTF-8
java·maven
涛ing1 小时前
【5. C++ 变量作用域及其深入探讨】
java·linux·c语言·开发语言·c++·ubuntu·vim
码农小旋风1 小时前
Hive分区和分桶
后端
字节全栈_mMD2 小时前
Flink Connector 写入 Iceberg 流程源码解析_confluent icebergsinkconnector
java·大数据·flink
轩情吖2 小时前
二叉树-堆(补充)
c语言·数据结构·c++·后端·二叉树··排序
SomeB1oody2 小时前
【Rust自学】19.2. 高级trait:关联类型、默认泛型参数和运算符重载、完全限定语法、supertrait和newtype
开发语言·后端·rust
小园子的小菜3 小时前
RocketMQ中的NameServer主要数据结构
java·中间件·rocketmq·java-rocketmq
武昌库里写JAVA3 小时前
redis原理之数据结构
spring boot·spring·毕业设计·layui·课程设计
平凡君3 小时前
缓存的今生今世
java·spring·缓存
纠结哥_Shrek3 小时前
Java 有很多常用的库
java·开发语言