文章目录
前言
首先我们要知道什么是对象装配,以及为什么需要对象装配.
对象装配: 就是获取bean对象,即把bean对象从Spring中取出,然后放到某个类中,这个过程就像注入一个对象,因此也叫做对象注入
为什么需要对象装配: 在过去获取bean的方法中,相对上繁琐,因此我们提高一种更简单的方法去获取bean.
一、对象装配的实现方法有哪些
对象装配的实现方式主要分为三种,分别为:
属性注入
Setter注入
构造方法注入
1.属性注入
属性注入是用到最多,即最常用的,这是因为其是三种注入方式中最简单的.
注入方式是通过 @Autowired 来实现.
目的是将Service类注入到Controller类中
注意:上述提到的注入方式和目的是说的所有的注入(属性注入,Setter注入,构造方法注入).
(1)创建一个Service类
因为目的就是将Service类注入到Controller类中,因此创建一个Service当然是首要目标.
创建一个service包(其中java包下的其它包路径为我创建的demo路径,读者不用太关注为什么这么创建),并且创建Service相关类


(2)创建一个Controller类
为了将Service类注入Controller,没有目的地怎么行呢
同样的,先创建一个Controller包,再在该包下创建Controller类
这个时候由于要有注入操作,因此我们前面所说的通过@Autowired就可以用到了.

可以看到,该操作就是将Service类注入到了Controller类中了,再通过Controller类中的sayHi()方法去调用Service类中的sayHi()方法.

当有注解@Autowired,就会帮你自动从Spring中找对应的UseService的Bean放入useService(会运行找到名字一样的放入)
(3)使用Controller类
使用Controller类去看Service类是否成功注入其中
要使用Controller起码能运行代码,因此我们需要有一个启动类.

最后得到打印结果

可以发现Controller类成功调用了Service类的sayHi方法,因此注入成功.
2.Setter注入
大部分内容和属性注入相同.因此我们不再重复讲述.
需要修改的部分是注入部分,即将Service类注入到Controller的地方
首先就是在@Autowired注释下创建Set方法(可通过generate快捷生成).

其中,Service类的创建丢在了@Autowired注释外,在注释下而是提供了set方法.
同样提供启动类验证.

可以发现Controller类成功调用了Service类的sayHi方法,因此注入成功.
3.构造方法注入
同理,修改Controller类的部分代码.

提供启动类验证

可以发现Controller类成功调用了Service类的sayHi方法,因此注入成功.
构造方法的小tip
通过构造方法注入时,如果当前类只有一个构造方法,那么@Autowired注解可以被省略,如果有多个构造方法,就不能省略。
4.注意
(1)需要添加上五大类注解
要使用对象装配注解,有一个大前提就是能被Spring扫描到,第一就是要配置扫描文件,其二就是要添加5大类注解在你要使用对象装配注解的实体类上.
实际上就是要取,前提是你要存了.
二、三种注入方式的优缺点
1.属性注入的优缺点
属性注入的优点,
使用简单
属性注入的缺点,
(1)无法注入一个不可变对象(即用final修饰的对象)
(2)移植性(兼容能力)不行,只能适用于IoC容器
(3)很容易违背单一设计原则.
这个时候就可能有人有疑问了,属性注入这么多缺点,为什么还是最常用的注入方式,因为它的优点就最大的原因,简单的使用方法为程序员解决了很多繁琐问题,而且缺点都不是不可避免的,你像单一设计原则,都是可以通过程序员的代码程序来解决.
2.Setter注入的优缺点
Setter注入的优点,
完全符合单一设计原则,因为使用的就是set方法,set方法传参就是只传了一个Controller对象.
Setter注入的缺点.
(1)无法注入一个不可变对象(即用final修饰的对象)
(2)注入的内容可被修改
其中第二条也是因为本身使用的就是set方法,就是去修改内容.
3.构造方法注入的优缺点
构造方法注入的优点,
(1)可注入不可变对象
(2)注入的内容不可被修改
(3)注入的对象会被完全初始化
(4)通用性更好(可移植性更好)
我们一看,哇!全是优点,这是因为构造方法注入是Spring官方所推荐使用的注入方法,因此只提供了优点,当然其也有缺点,其中一点就是可能会违背单一设计原则,当然这点也是可以通过程序员能力所解决的.
也发现了,构造方法的优点,基本就是由另外俩个注入的方式的缺点构成.
三、Resource(另外一种注入关键字)
1.@Resource和@Autowired区别.
----区别1:@Resource支持更多的参数设置,其可以设置name,type等.
----区别2:@Resource是来自JDK的的注解,@Autowired是来自Spring的注解.
----区别3:@Resource不支持构造方法注入
----区别4:查找方式,@Autowired是先根据类型查找,再根据名字查找.@Resource是先根据名字查找,再根据类型查找
2.@Resource可以设置参数的好处
首先提供一个实体类
再去创建该实体类的bean(有多个)

之后再去获取bean

最后去使用

得到的打印结果

言外之意就是没有唯一的bean.
这种时候不论使用@Resource还是@Autowired注解都是一样的.
但是我们知道@Resource注解可以重命名,因此我们提供name参数查找该名为该参数的bean(前提是该bean有这个名字)

最后成功打印

总结
对象装配的实现方式主要分为,属性注入,Setter注入,构造方法注入.
重点需要掌握和熟练使用的应该是属性注入,其它俩个注入起码需要了解其优缺点和基本使用,
本文介绍了Spring中对象装配的三种实现方式:属性注入、Setter注入和构造方法注入,详细讲解了每种方式的使用步骤、优缺点,并对比了@Autowired与@Resource的区别。通过实例展示了如何在Controller中注入Service类,强调了使用注解的前提是让Spring能够扫描到相关类并添加必要的注解。
3838

被折叠的 条评论
为什么被折叠?



