Lazy loaded image
💉Spring - DI
Words 1336Read Time 4 min
2025-4-4
2025-4-23
type
status
date
slug
summary
tags
category
icon
password

1.Autowired

自动装配:底层其实就是getBean 自动装配流程(先按照类型,再按照名称) 1.按照类型,找到这个组件 1.0 只有且找到一个,直接注入,名称无所谓 1.1 如果找到多个,再按照名称去找,变量名就是名称 1.1.1如果找到 直接注入 1.1.2 如果找不到,报错

2.Qualifier和Primary

Qualifier:如果容器中这样的组件有多个,精确指定
Primary:如果容器中有这样的组件有多个,指定主要的

3.Resource

适用于需要明确指定名称进行注入的情况,或者在Java标准库中使用
面试题:Autowired、Qualifier和Resource区别
notion image

4.构造器注入和setter注入

4.1 构造器注入

构造器注入不需要注解
原理:Spring 自动去容器中找到有参构造器需要的所有参数的组件值。

4.2setter注入

属性setter方法注入Spring最主流的注入方法,这种注入方法简单、直观,它是在被注入的类中声明一个setter方法,通过setter方法的参数注入对应的值。

5.xxxAware感知接口

Aware(感知)接口是Spring留给Bean的特殊通道。当Bean实现了某个Aware子接口,就相当于举起了手说:"我需要知道XXX信息"。Spring容器会在合适的时机,通过这个接口把Bean需要的资源"递"到它手中。
常见Aware接口
  • BeanNameAware:感知自己的Bean名称(工牌编号)
  • BeanFactoryAware:感知创建自己的工厂(咖啡机操作手册)
  • ApplicationContextAware:感知整个容器(店铺平面图)
  • EnvironmentAware:感知环境变量(店铺温湿度)

6.Value属性赋值

加在组件的属性上方

6.1.直接赋值

6.2.从配置文件xxx.properties获取值

6.3.进行计算赋值

6.4.调用方法赋值

6.5.静态调用类赋值

7.PropertySource

说明属性来源:把指定的文件导入容器中,供我们取值使用
写在类上,注明@Value取值的文件
classpath:从项目路径下找
classpath*:从所有包路径下找

8.Profile

在指定环境下加载组件;在类或者方法上标注
Rrofile是什么以及为什么要用它
1.Spring中的Profile 是什么 Spring中的Profile功能其实早在Spring 3.1的版本就已经出来,它可以理解为我们在Spring容器中所定义的Bean的逻辑组名称,只有当这些Profile被激活的时候,才会将Profile中所对应的Bean注册到Spring容器中。举个更具体的例子,我们以前所定义的Bean,当Spring容器一启动的时候,就会一股脑的全部加载这些信息完成对Bean的创建;而使用了Profile之后,它会将Bean的定义进行更细粒度的划分,将这些定义的Bean划分为几个不同的组,当Spring容器加载配置信息的时候,首先查找激活的Profile,然后只会去加载被激活的组中所定义的Bean信息,而不被激活的Profile中所定义的Bean定义信息是不会加载用于创建Bean的。
2.为什么要使用Profile 由于我们平时在开发中,通常会出现在开发的时候使用一个开发数据库,测试的时候使用一个测试的数据库,而实际部署的时候需要一个数据库。以前的做法是将这些信息写在一个配置文件中,当我把代码部署到测试的环境中,将配置文件改成测试环境;当测试完成,项目需要部署到现网了,又要将配置信息改成现网的,真的好烦。而使用了Profile之后,我们就可以分别定义3个配置文件,一个用于开发、一个用户测试、一个用户生产,其分别对应于3个Profile。当在实际运行的时候,只需给定一个参数来激活对应的Profile即可,那么容器就会只加载激活后的配置文件,这样就可以大大省去我们修改配置信息而带来的烦恼。
 
上一篇
Linux中的vi/vim快捷键使用
下一篇
Linux中的常用命令

Comments
Loading...