使用Spring框架最核心的两个功能就是IOC和AOP。IOC也就是控制反转,我们将类的实例化、依赖关系等都交由Spring来处理,以达到解耦合、利用复用、利于测试、设计出更优良程序的目的。而对用户来说,操作最对的便是注解。在Spring中提供了三类注解方式,下面我们就逐一分析。最后,你会发现,你最常用、看起来最方便的形式确实最不推荐的一种形式。
在属性上添加注解:
@Autowired private BookMapper bookMapper;
此种注解方式,应用最广泛:
但是此种方式spring官方并不推荐,在IDEA中你可能会收到以下警告:
这个警告意思就是不推荐变量注入方式,如果使用万能键可能会有IDEA的推荐方式:使用构造器的方式强制注入。
private BookMapper bookMapper; @Autowired public void setBookMapper(BookMapper bookMapper) { this.bookMapper = bookMapper; }
这种方式IDEA不会产生警告,Spring3.x推荐的注入方式,但并没有被广泛应用,当初推荐的理由:
private final BookMapper bookMapper; //@Autowired 在只有一个构造函数情况下可以不写注解 public BookServiceImpl(BookMapper bookMapper) { this.bookMapper = bookMapper; }
Spring4.x推荐的注入方式。对比Field注入:
从代码上来看,构造函数注入好像并没有显现出来它的优势,但问什么Spring4.x会推翻之前推荐的setter注入,采用构造函数注入呢?官方的理由汇总如下:
虽然Field注入方式代码是如此的简洁美观,但它存在一些问题:
而如果是采用构造器注入或者set注入,就可以避免上诉问题。
变量注入的方式应该尽量避免,但是存在即合理,根据具体情况可以采用最适合的方式。
如果你在项目中使用了lombok,那么构造函数方式代码可以更加简洁,并且运行良好:
原文:https://www.cnblogs.com/StarChen20/p/13941873.html