@Autowired 和 @Resource区别

@Autowired 和 @Resource区别

  • @Autowired 是 Spring 框架的注解,而 @Resource 是 JavaEE 的注解。
  • @Autowired 默认按照类型进行匹配,如果有多个同类型的 bean,则可以通过 @Qualifier 指定具体的 bean 名称。而 @Resource 默认按照名称进行匹配,如果名称匹配不到,则可以通过 name 属性指定具体的 bean 名称。
  • @Autowired 可以用在构造方法、setter 方法、字段上,而 @Resource 只能用在字段上。
  • @Autowired 是 Spring 框架的特有功能,而 @Resource 是 JavaEE 的标准功能,在使用时需要注意兼容性问题。
  • 都可以用于依赖注入

通过构造函数解决警告问题

为了消除警告,避免写出循环依赖的代码,我就使用了构造函数注入,以下是我项目中使用的方式,通过@RequiredArgsConstructor可以减少很多代码

@RequiredArgsConstructor是Lombok框架中的注解之一,用于自动生成一个包含所有必需参数的构造函数。它可以帮助开发人员减少代码量,避免手动编写构造函数。使用@RequiredArgsConstructor注解时,Lombok会自动检测类中所有被声明为final的字段,并将其作为构造函数的参数。生成的构造函数将使用这些参数来初始化字段。

例如,下面是一个使用@RequiredArgsConstructor注解:

@RequiredArgsConstructor
public class MyService {
    private final MyRepository myRepository;
    private final MyLogger myLogger;
    // ...
}

使用@RequiredArgsConstructor注解可以让开发人员更快地编写代码,并避免手动编写构造函数。将字段声明为final,以确保不可变性和线程安全性。

为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解?

个人认为,就像我们前面提到过的:@AutowiredSpring提供的,它是特定IoC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的IoC框架,是不能够支持注入的。

而 @ResourceJSR-250提供的,它是Java标准,我们使用的IoC容器应当去兼容它,这样即使更换容器,也可以正常工作。

posted @ 2024-05-10 09:56  好记性不如烂笔头=>  阅读(3)  评论(0编辑  收藏  举报