Spring IoC实战:依赖注入与@Qualifier详解
158 浏览量
更新于2024-08-28
收藏 320KB PDF 举报
"Spring IoC的具体使用及实现"
在Spring框架中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从应用程序代码转移到框架中。Spring通过依赖注入(Dependency Injection,DI)来实现IoC,允许组件之间解耦,提高代码的可测试性和可维护性。本示例将详细讲解如何在Spring中使用IoC,特别是通过注解的方式。
首先,我们来看`Boy.java`这个类。它包含了几个关键的Spring注解:
1. `@Component`:这是一个Spring注解,用于标记一个类为Spring容器中的bean。当Spring扫描包路径时,带有此注解的类会被识别并注册为bean,以便在其他地方使用。在这里,`Boy`类被注册为一个bean。
2. `@Scope("singleton")`:此注解指定了bean的作用域。默认情况下,Spring bean是单例的,意味着Spring容器只会创建一个实例并在整个应用生命周期中复用。在这个例子中,`Boy`类被配置为单例bean。
3. `@Autowired`:这是Spring的自动装配注解,用于自动注入依赖的bean。在`Boy`类中,`@Autowired`注解用于将实现了`Loveable`接口的对象注入到`lover`字段。Spring会自动寻找类型匹配的bean,并将其注入。如果有多于一个候选bean,可以使用`@Qualifier`来指定具体哪一个。
4. `@Qualifier("girl")`:当有多个候选bean时,`@Qualifier`注解用来明确指定要注入的bean的名称。在本例中,假设有一个名为`girl`的bean实现了`Loveable`接口,Spring会根据这个名字找到对应的bean并注入到`Boy`的`lover`字段。
5. `@Primary`:在`Dog.java`中,我们看到`@Primary`注解。这个注解用于标记当有多个候选bean时,哪个应该作为首选。如果有多个满足条件的bean,带有`@Primary`的bean会被优先选择。在`Dog`类中,`@Primary`和`@Component("dog")`一起使用,表示这个`Dog` bean是首选的`Loveable`实现。
现在,让我们看下如何工作。当Spring容器启动时,它会扫描包含`@Component`注解的类并创建bean实例。由于`Boy`和`Dog`都带有这个注解,它们会被加入到容器中。由于`Boy`的`lover`字段上有`@Autowired`和`@Qualifier("girl")`,Spring会查找名称为`girl`的bean,如果没有找到,会尝试查找类型匹配的bean。因为`Dog`带有`@Primary`,即使没有指定名字,它也会成为首选bean。所以,Spring会将`Dog`注入到`Boy`的`lover`字段。
最后,`Boy`类的`marry`方法展示了如何使用注入的bean。`marry`方法调用`lover.kiss()`,这会执行`Dog`类中的`kiss`方法,输出"dog kill"。
总结一下,这个例子展示了Spring IoC通过注解驱动的依赖注入如何工作,包括`@Component`、`@Scope`、`@Autowired`、`@Qualifier`和`@Primary`的使用。这些注解使得我们可以在不直接创建对象的情况下,让Spring容器管理和装配对象,实现了代码的松耦合和更灵活的设计。
2019-04-20 上传
2015-01-18 上传
2015-01-12 上传
2008-12-03 上传
2017-05-23 上传
2013-05-15 上传
2010-10-31 上传
2019-03-21 上传
2008-11-05 上传
weixin_38721252
- 粉丝: 5
- 资源: 936
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载