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

    构造器注入 VS Setter注入

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

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

    怎么解决

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

    @Service
    @Log4j2
    @RequiredArgsConstructor(onConstructor = @__(@Autowired))
    public class ProductServiceImpl implements ProductService {
    private final ProductMapper productMapper;
    ...
    }

    这里必须使用final修饰符来修饰注入的Service或Mapper首先我们看看编译后的类是什么样Intellij IDEA 如何去掉 @Autowired 注入警告-LMLPHP

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

    认识@RequiredArgsConstructor

    而上面我们讲了Spring推荐使用Setter或构造器注入,那么@RequiredArgsConstructor刚好可以完成这件事,而且还简化了你的代码,何乐而不为是不是?


    朕已阅 Intellij IDEA 如何去掉 @Autowired 注入警告-LMLPHP


    本文分享自微信公众号 - JAVA日知录(javadaily)。
    如有侵权,请联系 support@oschina.cn 删除。
    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    09-13 13:29
    查看更多