栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Autowired注解警告的解决办法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Autowired注解警告的解决办法

@AutoWired 在idea报警告

近期,发现@AutoWired注解在idea中总是报警告

java代码

如下:

@Controller
public class UserController {

    @Autowired
    private UserService userService;

}
警告内容

如下:

解决办法

于是乎,关联性的在网上找了找资料,用以下的写法不会报警告,同时这种写法也是spring官方推荐的写法,代码如下:

@Controller
public class UserController {

    private final UserService userService;

    public UserController(UserService userService){
        this.userService = userService;
    }

}
Lombok优雅写法
@Controller
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public clas UserController {
    //这里必须是final,若不使用final,用@NotNull注解也是可以的
    private final UserService userService;

}
拓展学习

由此,我这边拓展到了spring的三种依赖注入方式:

  • Field Injection

  • Constructor Injection

  • Setter Injection

Field Injection

@Autowired注解的一大使用场景就是Field Injection。

具体形式如下:

@Controller
public class UserController {

    @Autowired
    private UserService userService;

}

这种注入方式通过Java的反射机制实现,所以private的成员也可以被注入具体的对象。

Constructor Injection

Constructor Injection是构造器注入,是我们日常最为推荐的一种使用方式。

具体形式如下:

@Controller
public class UserController {

    private final UserService userService;

    public UserController(UserService userService){
        this.userService = userService;
    }

}

这种注入方式很直接,通过对象构建的时候建立关系,所以这种方式对对象创建的顺序会有要求,当然Spring会为你搞定这样的先后顺序,除非你出现循环依赖,然后就会抛出异常。

Setter Injection

Setter Injection也会用到@Autowired注解,但使用方式与Field Injection有所不同,Field Injection是用在成员变量上,而Setter Injection的时候,是用在成员变量的Setter函数上。

具体形式如下:

@Controller
public class UserController {

    private UserService userService;

    @Autowired
    public void setUserService(UserService userService){
        this.userService = userService;
    }
}

这种注入方式也很好理解,就是通过调用成员变量的set方法来注入想要使用的依赖对象。

三种依赖注入方式比较
注入方式可靠性可维护性可测试性灵活性循环关系的检测性能影响
Field不可靠很灵活不检测启动快
Constructor可靠不灵活自动检测启动慢
Setter不可靠很灵活不检测启动快
参考:
  1. https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-constructor-injection

  2. https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-setter-injection

  3. 利用Lombok编写优雅的spring依赖注入代码,去掉繁人的@Autowired_路遥知码农的博客-CSDN博客_lombok 依赖注入

  4. https://segmentfault.com/a/1190000040914633

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855127.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号