欢迎光临
我们一直在努力

Spring核心面试全解:IoC容器生命周期+AOP底层代理(JDK/CGLIB)+@Transactional事务全失效场景

一、Spring IoC控制反转与Bean完整生命周期

1.1 IoC&DI核心思想与面试延伸

IoC(控制反转):打破传统开发者主动new创建对象的模式,将对象创建、依赖装配、生命周期管理的控制权,完全移交Spring IoC容器。核心是「控制权反转」,开发者仅需声明依赖,无需手动管理对象。

DI(依赖注入):是IoC的实现手段,容器自动根据依赖关系,将目标Bean注入到当前Bean中,实现组件之间解耦。Spring主流三种注入方式:构造器注入、Setter注入、字段注入(@Autowired),下面附上生产可运行标准示例。

1. 字段注入(@Autowired 最常用)

直接在类字段上加注解,简洁高效,日常业务开发使用最多,但存在循环依赖、不利于单元测试等问题。

@Service
public class UserService {


// 字段注入:Spring自动根据类型匹配Bean注入
@Autowired
private UserMapper userMapper;

public User getUserById(Long id){


return userMapper.selectById(id);
}
}

2. Setter方法注入

通过Java Bean的set方法完成依赖注入,适合可选依赖、动态修改依赖的场景,是Spring早期推荐方式。核心知识点:Setter注入必须加 @Autowired。

@Service
public class UserService {


private UserMapper userMapper;

// Setter注入
@Autowired
public void setUserMapper(UserMapper userMapper) {


this.userMapper = userMapper;
}

public User getUserById(Long id){


return userMapper.selectById(id);
}
}

3. 构造器注入(Spring官方推荐)

通过类构造方法注入依赖,强制依赖、保证对象初始化完成后依赖完全就绪,有效规避空指针、循环依赖问题,生产核心业务优先使用。Spring4.3+,单构造器可省略@Autowired注解。

@Service
public class UserService {


private final UserMapper userMapper;

// 构造器注入
public UserService(UserMapper userMapper) {


this.userMapper = userMapper;
}

public User getUserById(Long id){


return userMapper.selectById(id);
}
}

面试高频辨析 + 三种注入优缺点(必背):

1. 字段注入(@Autowired)

优点:代码极简、开发速度快; 缺点:违背单一职责、隐藏依赖、容易循环依赖、无法做单元测试、Spring官方不推荐。

2. Setter注入

优点:适合可选依赖、动态变更依赖,Bean初始化完成后,可随时通过set方法动态修改依赖; 缺点:核心依赖无法强制保证,对象初始化后可能存在缺依赖空指针风险; 关键规则(面试必考):Setter注入必须加

赞(0)
未经允许不得转载:171主机测评 » Spring核心面试全解:IoC容器生命周期+AOP底层代理(JDK/CGLIB)+@Transactional事务全失效场景
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址