Spring框架@Autowired、@Resource、@RequiredArgsConstructor的使用和区别

本文将介绍Spring框架中@Autowired、@Resource和@RequiredArgsConstructor注解的使用和区别。

1. @Autowired

@Autowired是Spring框架中的一个注解,用于实现依赖注入(Dependency Injection,简称DI)。它可以自动装配bean,无需手动创建对象。当Spring容器扫描到使用@Autowired注解的类时,会自动将匹配的bean注入到该类的字段或方法参数中。

使用示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UserService {
    @Autowired
    private UserRepository userRepository;
}

2. @Resource

@Resource是JavaEE的一个标准注解,也可以在Spring中使用。它的作用与@Autowired类似,也是实现依赖注入。不同之处在于,@Resource默认按照名称进行装配,当找不到与名称匹配的bean时,才会按类型进行装配。如果指定了name属性,则会按照指定的名称进行装配。

使用示例:

import javax.annotation.Resource;
import org.springframework.stereotype.Component;

@Component
public class UserService {
    @Resource(name = "userRepository")
    private UserRepository userRepository;
}

3. @RequiredArgsConstructor

@RequiredArgsConstructor是一个Lombok提供的注解,用于自动生成构造函数。它会根据类中定义的字段生成一个全参构造函数,并将这些字段作为参数传递给构造函数。这样,我们就可以避免手动编写构造函数,简化代码。

使用示例:

首先,需要在项目中引入Lombok依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

然后,在类上添加@RequiredArgsConstructor注解:

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class UserService {
  private final UserService userService;
}

区别总结

  • @Autowired和@Resource都可以实现依赖注入,区别在于@Autowired默认按类型装配,而@Resource默认按名称装配。如果需要按名称装配,可以在字段或方法参数前加上@Resource注解并指定name属性。
  • @Autowired是Spring框架提供的注解,而@Resource是JavaEE标准的注解。
posted @ 2023-09-24 20:53  是小陈呀  阅读(906)  评论(0)    收藏  举报