温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

javaspring使用构造器注入的原因是什么

发布时间:2021-09-27 15:02:07 来源:亿速云 阅读:112 作者:小新 栏目:编程语言

这篇文章将为大家详细讲解有关javaspring使用构造器注入的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、前言

Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反转)和AOP,平时使用最多的就是其中的IOC,我们通过将组件交由Spring的IOC容器管理,将对象的依赖关系由Spring控制,避免硬编码所造成的过度程序耦合。

二、常见的三种注入方式

2.1 field注入

@Controllerpublic class FooController { @Autowired //@Inject private FooService fooService;  //简单的使用例子,下同 public List<Foo> listFoo() {   return fooService.list(); }}

这种注入方式应该是笔者目前为止开发中见到的最常见的注入方式。原因很简单:

注入方式非常简单:加入要注入的字段,附上@Autowired,即可完成。

使得整体代码简洁明了,看起来美观大方。

2.2 构造器注入

@Controllerpublic class FooController {  private final FooService fooService;  @Autowired public FooController(FooService fooService) {   this.fooService = fooService; }  //使用方式上同,略}

在Spring4.x版本中推荐的注入方式就是这种,相较于上面的field注入方式而言,就显得有点难看,特别是当注入的依赖很多(5个以上)的时候,就会明显的发现代码显得很臃肿

2.3 setter注入

@Controllerpublic class FooController {  private FooService fooService;  //使用方式上同,略 @Autowired public void setFooService(FooService fooService) {   this.fooService = fooService; }}

在Spring3.x刚推出的时候,推荐使用注入的就是这种,但是构造器注入参数太多了,显得很笨重,另外setter的方式能用让类在之后重新配置或者重新注入。

三、构造器注入的好处

这个构造器注入的方式,能够保证注入的组件不可变,并且确保需要的依赖不为空。此外,构造器注入的依赖总是能够在返回客户端(组件)代码的时候保证完全初始化的状态

依赖不可变:其实说的就是final关键字,这里不再多解释了。不明白的园友可以回去看看Java语法。  依赖不为空(省去了我们对其检查):当要实例化FooController的时候,由于自己实现了有参数的构造函数,所以不会调用默认构造函数,那么就需要Spring容器传入所需要的参数,所以就两种情况:1、有该类型的参数->传入,OK 。2:无该类型的参数->报错。所以保证不会为空,Spring总不至于传一个null进去吧 。  完全初始化的状态:这个可以跟上面的依赖不为空结合起来,向构造器传参之前,要确保注入的内容不为空,那么肯定要调用依赖组件的构造方法完成实例化。而在Java类加载实例化的过程中,构造方法是最后一步(之前如果有父类先初始化父类,然后自己的成员变量,最后才是构造方法,这里不详细展开)。所以返回来的都是初始化之后的状态。

关于“javaspring使用构造器注入的原因是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI