Spring IoC实战:依赖注入与@Qualifier详解

0 下载量 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容器管理和装配对象,实现了代码的松耦合和更灵活的设计。