Spring IoC实战:依赖注入与@Qualifier详解
50 浏览量
更新于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容器管理和装配对象,实现了代码的松耦合和更灵活的设计。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2008-12-03 上传
2017-05-23 上传
2013-05-15 上传
2010-10-31 上传
2019-04-20 上传
2019-03-21 上传
weixin_38721252
- 粉丝: 5
- 资源: 936
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录