在Spring 中如何通过注解的方式进行依赖注入

146 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

在java 中引入了注解之后,Spring 从2.5 版本开始,支持基于注解的依赖注入功能。虽然和之前的xml 方式有差异,但是整体上延续了Spring 框架的IOC 容器的设计和实现上的一致性。

其实也就是依赖关系的“表达方式”不同,除此之外,其底层的实现机制基本不变。

使用注解进行依赖关系自动绑定

@Autowire

在使用xml 进行依赖关系绑定的时候,我们知道有一种写法:

<beans default-autowire="bytype">
    <bean id="newsProvider" class="xxxx.xxxx" autowire="byType"/>
    <bean id="newsListener" class="xxxx.xxxx"/>
    ...
</beans>

这样就可以通过default-autowire 来指定默认的自动绑定方式,也可以通过每个bean 定义上的autowire 来指定每个bean,为其定义各自的自动绑定方式。

这些方法都是触发容器,对相应的对象,加之“依赖注入”的标识。

如果用注解来做为一种标识,就可以称之为基于注解的依赖自动绑定。

@Autowire 是“基于注解进行依赖注入”的核心注解。有了它,就可以让容器知道,需要为当前的类注入哪些依赖。

@Autowire 是按照类型匹配进行依赖注入的。但是它比单纯的“byType”更灵活,且功能更加强大。

@Autowire 可以标注于类定义的多个位置,分别如下:

  1. 类的成员变量(或者说域/属性,对应的英文为Field/Property)
    不论其作用范围是private 还是public,只要标注了@Autowire,那么容器就会满足这个类的依赖注入的需求。
  2. 构造方法
    将注解标注于构造方法之上,它就可以根据构造方法的参数类型来决定将什么样的依赖对象注入给当前的类。
  3. 方法
    和标注于构造方法上的情况很类似,只要这个方法的参数中有需要被注入的参数,那么就可以将@Autowire 注解标注于方法之上,来完成依赖注入的功能。

总结

这篇文章我们引入了“如何通过注解方式进行依赖注入”的概念,讲明了@Autowire 注解的作用。其实基于注解进行依赖注入还有很多中其他方式,使用@Autowire 注解是最基本且使用最广泛的一种方式。