Spring常用的三种注入方式是什么,如何选用?

沙海
沙海
沙海
994
文章
2
评论
2021年4月25日03:16:31
评论
2 1193字阅读3分58秒
摘要

在之前没有使用spring框架的时候,如果我们某个类需要依赖其它类的方法的时候,通常是要new一个依赖类的对象,然后再去调用它的方法,这种开发的问题就是耦合性高。所以有了spring框架之后,在spring框架中有IOC和DI的思想,也就是利用控制反转和依赖注入的核心思想,这样依赖类不再由开发人员自己去实例化操作,而是通过spring框架帮我们完成实例化,并把实例化的对象放入到容器中,当我们需要这个对象时,通过注入的方式注入进来就可以了。

Spring常用的三种注入方式是什么,如何选用?

在之前没有使用spring框架的时候,如果我们某个类需要依赖其它类的方法的时候,通常是要new一个依赖类的对象,然后再去调用它的方法,这种开发的问题就是耦合性高。所以有了spring框架之后,在spring框架中有IOC和DI的思想,也就是利用控制反转和依赖注入的核心思想,这样依赖类不再由开发人员自己去实例化操作,而是通过spring框架帮我们完成实例化,并把实例化的对象放入到容器中,当我们需要这个对象时,通过注入的方式注入进来就可以了。

那么spring框架的注入方式有好几种方式,最为常用的主要有以下三种方式,分别是:

构造方法注入set方法注入注解注入接下来我们就分别说明这三种注入方式,学习如何实现注入操作。

1.构造方法注入

这种注入方式是通过构造方法来实现,类中必须提供构造方法,属性的set方法不需要。

下面通过例子来说明。

Car类

Spring常用的三种注入方式是什么,如何选用?

Spring常用的三种注入方式是什么,如何选用?

Spring-config.xml配置文件

可以用形参名字注入。

Spring常用的三种注入方式是什么,如何选用?

也可以根据构造方法形参的索引位置注入。

Spring常用的三种注入方式是什么,如何选用?

CarTest测试类

Spring常用的三种注入方式是什么,如何选用?

结果

Spring常用的三种注入方式是什么,如何选用?

2. set方法注入

这种注入方式通过set方法完成注入,所以在类中必须要给属性设定set方法。

下面通过一个例子来说明。

Person类

Spring常用的三种注入方式是什么,如何选用?

Spring.config.xml 配置文件

Spring常用的三种注入方式是什么,如何选用?

PersonTest测试类

Spring常用的三种注入方式是什么,如何选用?

测试输出的结果

Spring常用的三种注入方式是什么,如何选用?

注意:构造方法注入和set注入都是通过java的反射技术得以实现的。

Spring常用的三种注入方式是什么,如何选用?

3. 注解

通过@Autowired注解方式,可以实现自动装配,只要在对应的属性上面添加该注解进来,但是@Autowired注解是按照byType类型来注入。

再看下面这个例子。

在Person类上面加入Car汽车类,并在上面添加@Autowired注解。

Spring常用的三种注入方式是什么,如何选用?

注意:除了上述的在spring.config.xml 文件配置的内容之外,还得在里面添加如下配置,

主要是通过context:component-scan标签去com.bean包下扫描Person类上面的@Autowired注解,将Spring容器中的car 汽车对象注入到Person类的car属性中。

Spring常用的三种注入方式是什么,如何选用?

结果:

Spring常用的三种注入方式是什么,如何选用?

除了使用@Autowired 注解来注入外,其实也可以通过java的注解@Resource来实现自动装配,它默认按照byName名称来进行自动装配,但是如果找不到与之名称相匹配的bean对象时,则会按照byType类型进行装配。

使用@Autowired注解和@Resource注解的作用是相同的,只不过@Autowired注解按照byType类型注入,如果@Autowired想使用名称可以结合@Qualifier注解进行使用。

通过注解的方式进行依赖注入,可以省去在配置文件编写的时间,可以大大提高开发效率,所以在开发这种方式也是最常用的方式。

好了,spring常用的注入方式就和大家分享到这里,虽然技术很基础,但是开发中经常会用到,希望给大家带来一定的帮助,也可以在下面留言交流。

举报/反馈

继续阅读
weinxin
资源分享QQ群
本站是一个IT技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: