Spring的核心思想-DI依赖注入

1、Spring DI的理解

关键字:DI(Dependecy Inject 依赖注入)是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要要的另一个bean对象

2、什么是Spring 的bean

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

3、将一个类声明为Bean的注解有哪些

@Component:定义通用Bean的注解可标注任意类为 Bean。如果一个Bean 不知道属于哪个层,可以使用 @Component 注解标注。

@Repository:定义数据访问层Bean的注解

@service :定义业务层Bean的注解。

@Controller:定义控制器Bean的注解

4、@Component和@Bean的区别是什么

@Component 注解作用于类,而 @Bean 注解作用于方法。

@component 通常是通过类路径扫描来实现自动扫描并完成装配 Bean 到 Spring Ioc 容器中。

@Bean 注解通常用于注解某个方法,通过 @Bean 注解告诉了 Spring Ioc 容器,该方法的返回值实例是一个 Bean 。

5、@Autowired和@Resource的区别是什么

@Autowired是Spring提供的注解,@Resource是JDK 提供的注解。

@Autowired 默认的注入方式为 byType(按类型自动注入),

@Resource默认注入方式为byName(按名称自动注入)

6、Spring框架中常见注入方式有几种

三种方式:

构造注入:使用构造方法注入bean

Setter注入:使用setter方法注入bean

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

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

ClassPathXmlApplicationcontext: 根据项目类路径classpath 下的配置文件加载 bean;

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

AnnotationconfigApplicationcontext: 根据读取到的注解加载 bean;

WebApplicationcontext: Web 容器下按照配置文件加载 bean;

8、BeanFactory和ApplicationContext有什么区别

两者之间的关系 :

BeanFactory和 Applicationcontext 是 Spring 的两大核心接口,都可以当做 Spring 的容器;

两者区别与不同 :

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

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

Bean 的创建加载方式:

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

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

SpringDI(依赖注入)
作用:将springioc容器所创建的各个组件,使用DI的语法进行关联,耦合(胶水)

DI实现方式

set注入

语法:

1.set方法

2.set配置

<property name value ref>

构造注入

语法:

1.构造方法

2.构造配置

<constructor-arg name type index value ref>

属性注入

DI数据类型:

基本类型与String

JavaBean

复杂类型,list set array map properties(构造注入不支持)

DI使用步骤:

1.思考,什么方式,什么数据类型

2.给属性提供set(构造)方法

3.编写配置文件

相关推荐
苍何15 分钟前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter29 分钟前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者42 分钟前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥1 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
zs宝来了1 小时前
Playwright 自动发布 CSDN 的完整实践
java
吴声子夜歌2 小时前
TypeScript——基础类型(三)
java·linux·typescript
GetcharZp3 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端
Victor3563 小时前
MongoDB(69)如何进行增量备份?
后端
Victor3564 小时前
MongoDB(70)如何使用副本集进行备份?
后端