Java面试题之springioc 控制反转

张开发
2026/4/3 21:11:34 15 分钟阅读
Java面试题之springioc 控制反转
详细解释spring ioc 的控制反转原理1.注解扫描、2.类信息写入BeanDefinition存入Bean 定义注册表3.反射根据对象的构造方法创造对象存入ioc容器中。Spring 扫描 Bean 中的Autowired在ioc中找bean再通过构造反射到当前bean。三种注入方式1. 字段注入最常用写法简单RestController public class UserController { // 自动从 IOC 容器中获取 UserMapper 实例并注入 Autowired private UserMapper userMapper; // 直接使用 GetMapping(/user/{id}) public User getUserById(PathVariable Integer id) { return userMapper.findById(id); } }2. 构造方法注入Spring 官方推荐更安全RestController public class UserController { private final UserMapper userMapper; // Spring 4.3 可省略 Autowired自动按类型注入 // 必须保证参数类型在 IOC 容器中存在唯一 Bean public UserController(UserMapper userMapper) { this.userMapper userMapper; } GetMapping(/user/{id}) public User getUserById(PathVariable Integer id) { return userMapper.findById(id); } }3. Setter 注入灵活性高适合可选依赖RestController public class UserController { private UserMapper userMapper; Autowired public void setUserMapper(UserMapper userMapper) { this.userMapper userMapper; } GetMapping(/user/{id}) public User getUserById(PathVariable Integer id) { return userMapper.findById(id); } }Spring 中除了Autowired之外的自动注入方式方式 1Autowired Qualifier指定名称注入RestController public class UserController { // 明确指定要注入名为 userServiceV1 的 Bean Autowired Qualifier(userServiceV1) private UserService userService; }方式 2Resource按名称注入RestController public class UserController { // 变量名 Bean 名称直接按名称匹配 Resource private UserService userServiceV1; // 注入 userServiceV1 }方式 3构造方法注入 QualifierSpring 推荐写法按照名称指定RestController public class UserController { private final UserService userService; // 构造方法参数上指定名称依赖不可变更安全 public UserController(Qualifier(userServiceV1) UserService userService) { this.userService userService; } }

更多文章