java 移除警告_Intellij IDEA如何去掉@Autowired 注入警告的方法

问题

在Service层注入Mybatis的Mapper我们通常会使用@Autowired 自动注入

@Autowired

private ProductMapper productMapper;

但是这样Intellij IDEA会显示红色告警,提示不能自动注入。

75a38d61e84b4eb2ef015d67bfbd4a18.png

当我们在Controller层注入Service时www.cppcns.com我们也经常直接在Filed上使用@Autowired 注解,这时候不显示红色警告,但是也显示Field injection is not recommended 的建议

a8ffbc759ec26f8069576f5c3a687ed8.png

原因

第一种情况是因为IDEA可以识别并理解Spring的上下文。然而Mapper接口是Mybatis的,IDEA理解不了。所以会出现红色告警。

而第二种原因是因为官方不推荐使用Filed进行注解,而推荐使用构造器或Setter方法进行注解,像下面两种写法就不会出现警告。

private final ProductService productService;

@Autowired

public ProductController(ProductService productService) {

this.productService = productService;

}

or

private ProductService productService;

@Autowired

public void setProductService(ProductService productService) {

this.productService = productService;

}

问题是什么

Field注入看起来非常好,够简洁,代码通俗易懂。你的类可以专注于业务而不被依赖注入所污染。你只需要把@Autowired扔到变量之上就好了,不需要特殊的构造器或者set方法,依赖注入容器会提供你所需的依赖。但是Field注入会带来2个问题:

当注入的对象依赖其他对象,而被依赖的对象没被创建的话就会出现空指针异常。

这样的类没办法在容器之外被重用,也不能期望反射提供其所需的依赖。

详细原因大家可以去这篇文章查看:http://olivergierke.de/2013/11/why-field-injection-is-evil/

构造器注入 VS Setter注入

Setter应该被用来注入可变的依赖。当没有提供依赖时,这个类也应该能够运转。当实例化对象后,这些依赖也能随时改变。其实也视情况而变,有时,一个不变的对象是理想状态。有时,最好是能在运行期间改变对象的属性。

构造器注入对象需要依赖的对象初始化后才能正常运转,通过构造器提供这些依赖就能保证对象初始化后就能被使用。使用构造器注入的一个可能的影响就是循环依赖。

怎么解决

我们可以使用Lombok提供的注解 @RequiredArgsConstructor 来解决这两个问题(Lombok这个大家项目都会使用吧)

@Service

@Log4j2

@RequiredArgsConstructor(onConstructohttp://www.cppcns.comr = @__(@Autowired))

public class ProductServiceImpl implements ProductService {

private final ProductMapper productMapper;

...

}

这里必须使用final修饰符来修饰注入的Service或Mapper首先我们看看编译后的类是什么样

b697c5952576e506742219d3ed24598e.png

编译完成后变成了使用构造器进行注入

认识@RequiredArgsConstructor

Lombok官方给出的解释是: Generates constructor that takes one argument per final / non-null field. 所以它会为final和nonnull的属性作为参数产生一个构造函数。

而上面我们讲

到此这篇关于Intellij IDEA如何去掉@Autowired 注入警告的方法的文章就介绍到这了,更多相关IDEA去掉@Autowired 注入警告内www.cppcns.com容请搜编程客栈索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: Intellij IDEA如何去掉@Autowired 注入警告的方法

本文地址: http://www.cppcns.com/ruanjian/java/307504.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值