@Autowired、@Resource、构造器注入
2026/6/1 5:36:10 网站建设 项目流程

@Autowired和@Resource区别

相同点:

二者都能完成“自动装配” 即:把一个Bean注入到另一个Bean里

不同点:

@Autowired private UserService userService;

用这个,Spring 会先看“变量类型”(这里的类型就是UserService这个接口)是什么,再去容器里找。

缺点:如果你写了两个实现类(比如UserServiceImplAUserServiceImplB),Spring 就会懵圈,直接报错:NoUniqueBeanDefinitionException

解决:配合:@Qualifier("userServiceImplA")来指定名字

@Resource private UserService userServiceImplA;

java会先看“变量名” (eg:userServiceImplA),找到就注入,没找到,就退一步去按类型去找

优势:if 变量名写的和Bean名字英语,就可以自动找到

构造器注入

方式一:

@Service public class UserService { private final UserMapper userMapper; // 1. 声明为 final,不可变 // 2. 通过构造方法传进来 public UserService(UserMapper userMapper) { this.userMapper = userMapper; } public void verify() { userMapper.selectById(1); } }

方式二(@RequiredArgsConstructor):

@Service @RequiredArgsConstructor // Lombok 神器:自动帮在大括号里生成包含 final 变量的构造器 public class UserService { private final UserMapper userMapper; // 只要写 final 即可,甚至不用写 @Autowired public void verify() { userMapper.selectById(1); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询