尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Spring框架核心:IoC、AOP与Bean生命周期详解

Spring框架核心:IoC、AOP与Bean生命周期详解 1. Spring框架核心概念解析Spring框架作为Java企业级开发的事实标准其核心设计理念围绕IoC控制反转和AOP面向切面编程展开。理解这些基础概念是掌握Spring框架的关键前提。1.1 IoC容器工作原理Spring IoC容器通过三级缓存机制解决循环依赖问题这是面试中最常被深入追问的技术点。让我们通过一个典型场景来解析假设存在两个相互依赖的单例BeanService public class ServiceA { Autowired private ServiceB serviceB; } Service public class ServiceB { Autowired private ServiceA serviceA; }容器处理流程如下实例化阶段先创建ServiceA原始对象此时serviceB属性尚未注入提前暴露引用将ServiceA的ObjectFactory放入三级缓存singletonFactories属性注入发现需要注入ServiceB转向创建ServiceB实例解决循环依赖ServiceB注入ServiceA时从三级缓存获取ServiceA的早期引用完成初始化ServiceB初始化完成后回填到ServiceA的属性中关键点只有通过setter/field注入的单例Bean才能解决循环依赖构造器注入会导致无法处理的循环引用异常。1.2 AOP实现机制Spring AOP基于动态代理实现主要有两种代理方式代理类型实现原理特点适用场景JDK动态代理实现相同接口依赖接口接口规范的业务类CGLIB代理继承目标类无需接口普通POJO类代理创建时机发生在Bean初始化后通过BeanPostProcessor介入处理。实际开发中常见的切面应用包括事务管理Transactional日志记录权限校验性能监控2. Spring Bean生命周期详解理解Bean的生命周期是掌握Spring框架的核心下面通过流程图展示关键阶段实例化 - 属性填充 - Aware接口回调 - 初始化前 - 初始化 - 初始化后 - 使用中 - 销毁前 - 销毁2.1 关键扩展点Aware接口族BeanNameAware获取Bean名称BeanFactoryAware获取BeanFactory引用ApplicationContextAware获取应用上下文初始化回调PostConstruct注解方法InitializingBean.afterPropertiesSet()init-method指定方法销毁回调PreDestroy注解方法DisposableBean.destroy()destroy-method指定方法2.2 作用域与线程安全Spring支持多种Bean作用域作用域说明线程安全考虑singleton默认单例需保证无状态prototype每次请求新实例无需特别处理request每个HTTP请求独立Web环境专用session用户会话级别Web环境专用实战经验在Controller中使用Scope(prototype)可避免并发问题但会增加GC压力需权衡使用。3. Spring事务管理深度剖析3.1 事务传播机制Spring定义了7种传播行为最常用的有三种REQUIRED默认当前有事务则加入没有则新建REQUIRES_NEW总是新建事务挂起当前事务NESTED在当前事务中创建保存点形成嵌套事务Transactional(propagation Propagation.REQUIRES_NEW) public void updateOrder(Order order) { // 方法体 }3.2 事务失效场景自调用问题同类方法调用不会经过代理public class OrderService { public void create() { this.update(); // 事务失效 } Transactional public void update() {...} }异常处理不当默认只回滚RuntimeExceptionTransactional(rollbackFor Exception.class) // 正确配置 public void method() throws Exception {...}非public方法动态代理无法拦截私有方法4. Spring MVC核心流程解析4.1 请求处理流程DispatcherServlet前端控制器接收所有请求HandlerMapping映射请求到处理器HandlerAdapter适配执行处理器ViewResolver解析逻辑视图名View渲染最终响应4.2 常用注解对比注解作用层级典型应用Controller类传统MVC控制器RestController类RESTful API控制器RequestMapping类/方法请求路径映射GetMapping方法GET请求快捷方式RequestBody参数接收JSON请求体ResponseBody方法返回JSON响应5. Spring Boot自动配置原理5.1 启动过程关键步骤SpringBootApplication复合注解包含SpringBootConfiguration标记配置类EnableAutoConfiguration启用自动配置ComponentScan组件扫描自动配置条件判断ConditionalOnClass类路径存在指定类ConditionalOnMissingBean容器中没有该BeanConditionalOnProperty配置属性匹配5.2 自定义Starter开发创建autoconfigure模块编写配置类Configuration ConditionalOnClass(MyService.class) EnableConfigurationProperties(MyProperties.class) public class MyAutoConfiguration { Bean ConditionalOnMissingBean public MyService myService() { return new MyService(); } }配置META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports6. 高频面试题精讲6.1 循环依赖解决方案Spring通过三级缓存解决循环依赖一级缓存singletonObjects完整Bean二级缓存earlySingletonObjects早期引用三级缓存singletonFactories对象工厂注意构造器注入无法解决循环依赖必须使用setter/field注入6.2 BeanFactory与ApplicationContext区别特性BeanFactoryApplicationContext延迟加载支持不支持国际化不支持支持事件机制不支持支持AOP集成不支持支持资源访问基础支持增强支持7. 性能优化实践7.1 组件扫描优化SpringBootApplication(scanBasePackages com.myapp) // 替代默认的全包扫描7.2 懒加载策略Lazy Service public class HeavyService { // 延迟初始化 }7.3 缓存使用建议合理使用Cacheable避免缓存大对象设置合理过期时间Cacheable(value users, key #id, unless #result null) public User getUser(Long id) {...}8. 常见问题排查指南8.1 事务不生效排查检查是否抛出RuntimeException确认方法是否为public验证是否同类调用检查数据库引擎是否支持事务如MyISAM不支持8.2 Bean注入失败处理检查ComponentScan范围确认是否有多个同类型Bean使用Primary解决歧义注入检查Conditional条件Bean Primary public DataSource primaryDataSource() {...}9. 设计模式应用Spring框架中典型的设计模式实现工厂模式BeanFactory代理模式AOP实现模板方法JdbcTemplate观察者模式ApplicationEvent适配器模式HandlerAdapter单例模式Bean作用域10. 最新特性追踪Spring 6.0新特性全面支持JDK 17响应式编程增强GraalVM原生镜像支持改进的测试框架Spring Boot 3.0变化Jakarta EE 9支持自动配置文件变更记录器名称优化改进的缓存抽象
返回列表