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.编写配置文件

相关推荐
wangchunyu1141 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck2 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir2 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人2 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
m0_639906943 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
2501_944521593 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
holly就是我3 小时前
AI 编程助手为什么跑偏?用开源 ccglass 看清 Prompt、工具调用和 Token 消耗
人工智能·后端
鸿蒙开发3 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
用户788477316343 小时前
小程序后端三选一:云开发、.NET WebAPI、Node,我按客户现状分了三种答案
后端
aiopencode3 小时前
局域网设备抓包怎么做?用 TraceEagle 抓电视、游戏机和 IoT 流量
后端·ios