@Autowired 和 @Resource 都是 Java 中用于进行依赖注入的注解,但它们在使用方式和作用上有一些不同。
-
来源:
@Autowired是Spring框架的注解,用于进行Spring容器管理的bean之间的自动装配。@Resource是Java EE(Enterprise Edition)的注解,包含在javax.annotation包中,可用于进行依赖注入,不仅限于Spring框架。
-
自动装配:
@Autowired实现了自动装配,它根据类型匹配自动注入依赖项。如果存在多个匹配的候选项,它可以根据属性名称进行进一步的解析,以解决歧义。@Resource主要通过名称进行自动装配。它首先尝试按名称匹配,然后根据类型进行匹配。如果存在多个具有相同名称的bean,那么它会根据类型进行匹配,但不具备@Autowired的歧义解决能力。
-
使用场景:
@Autowired更常用于Spring应用程序,特别是在Spring框架中进行依赖注入时。@Resource通常用于Java EE应用程序,它也可以在非Spring环境中使用,但通常不具备@Autowired的高度灵活性。
-
引入包:
@Autowired需要引入org.springframework.beans.factory.annotation.Autowired包。@Resource需要引入javax.annotation.Resource包。
示例使用@Autowired的方式:
import org.springframework.beans.factory.annotation.Autowired;
public class MyService {
private MyRepository myRepository;
@Autowired
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
}
示例使用@Resource的方式:
import javax.annotation.Resource;
public class MyService {
@Resource
private MyRepository myRepository;
}
总之,@Autowired 和 @Resource 都可以用于依赖注入,但它们的使用场景和行为略有不同,根据具体的应用和需求选择合适的注解。如果你正在使用Spring框架,通常更倾向于使用@Autowired。