容器-注入

AI-摘要
LNotes-AI GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
容器-注入
Liuxz问题:
在 Spring 中,用@Bean将组件添加到容器后,为什么在@Controller等组件中还需要用@Autowired自动注入一遍?
回答:
@Bean和@Autowired是 Spring IoC(控制反转)机制中两个核心且互补的步骤,作用不同,缺一不可:
@Bean:负责 “注册组件到容器”- 作用:告诉 Spring 创建指定对象,并将其放入容器中管理(相当于 “把工具放进仓库”)。
- 例:用
@Bean定义DataSource(数据库连接池),Spring 会创建该实例并保存到容器,但此时它仅存在于容器中,未被其他组件使用。
@Autowired:负责 “从容器中获取并注入组件”- 作用:当某个组件(如
@Controller、@Service)需要依赖容器中的其他组件时,告诉 Spring“从容器中找一个该类型的组件,注入给我使用”(相当于 “从仓库取工具”)。 - 例:
UserController需要DataSource操作数据库,用@Autowired标注DataSource字段,Spring 会自动从容器中找到已注册的DataSource实例并注入。
- 作用:当某个组件(如
总结:
@Bean是 “存”:将组件注册到容器,作为依赖的 “提供者”;@Autowired是 “取”:从容器获取依赖并注入,作为依赖的 “使用者”。
两者结合实现组件解耦:组件无需自己创建依赖,由 Spring 统一管理和注入,这是 Spring IoC 的核心思想。
1.@Autowired
自动装配,原理:Spring调用 容器.getBean
2.@Qualifier
@Qualifier("zhangsan") //指定名字 精确指定,如果容器中有多个名字,可以指定组件名
可以指定名字自动装配
3 & 4
3.@Primary
@Primary //如果一个接口有多个实现类,使用@Primary注解,可以指定默认的实现类 (主组件)
4.@Resource
@Resource 也是自动注入
问题:@Autowired 和 @Resource 的区别?
共同点:
均用于 Spring 的依赖注入,可将容器中的 Bean 注入到目标组件中。
区别:
来源不同
- @Autowired:Spring 框架自带(org.springframework 包)
- @Resource:JDK 自带(javax.annotation 包,属于 Java EE 规范)
默认注入方式
- @Autowired:默认按类型(byType) 匹配 Bean
- @Resource:默认按名称(byName) 匹配 Bean
多 Bean 场景处理
- @Autowired:需配合 @Qualifier 注解指定 Bean 名称
- @Resource:可直接通过 name 属性指定 Bean 名称
支持的注入位置
- @Autowired:支持字段、构造方法、setter 方法
- @Resource:支持字段、setter 方法,不支持构造方法
属性差异
- @Autowired:仅支持 required 属性(控制是否必须注入,默认 true)
- @Resource:支持 name(指定 Bean 名)、type(指定 Bean 类型)等属性
@AutoWired //自动注入组件的,基本类型不可以注入
@Value :
- @Value(“字面值”):直接赋值
- @Value(“${key}”) :动态从配置文件中取出某一项的值
- @Value(“#{SpEL}”):Spring Expression Language:Spring 表达式语言
- 更多写法在Spring.io 官网查看
@Value(“${key : 默认值}”)//取不到的时候是默认值
PropertySource()
说明属性来源,把指定的文件导入容器中,供我们使用
1.classpath:cat.properties : 从自己的项目类路径下找
2.classpath*:Log4j-charsets.properties : 从所有包的类路径下找
ResourceUtils.getFile(路径)
工具类,获取文件
注入组件的方法
| 实验 | 内容 | 目标 |
| 实验1 | @Autowired | 理解自动装配 |
| 实验2 | @Qualifier | 理解类型/具名注入 |
| 实验3 | @Primary | 理解多组件注入方式 |
| 实验4 | @Resource | 扩展其他非Spring注解支持 |
| 实验5 | setter方法注入 | 理解setter方法注入 |
| 实验6 | 构造器注入 | 理解构造器注入 |
| 实验7 | xxxAware | 理解感知接口 |
| 实验8 | @Value | 理解配置文件取值 |
| 实验9 | SpEL | 理解Spring表达式基本使用 |
| 实验10 | @PropertySource | 理解 properties文件注入 |
| 实验11 | @Profile | 理解多环境 |
原生方式启动ioc容器,需要配置xml文件,具体看视频,了解即可
https://www.bilibili.com/video/BV14WtLeDEit?spm_id_from=333.788.videopod.episodes&vd_source=5e4f6f78c6de6ba4386afe617a1f26be&p=33
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果




