面试题-spring
1.springboot的生命周期
1. 初始化:加载配置文件,创建SpringApplication实例;
2. 启动:调用run()方法,执行初始化器(Initializer)、监听器(Listener);
3. 上下文创建:创建ApplicationContext,扫描组件并注册Bean;
4. 自动配置:根据依赖启动自动配置类,注入Bean;
5. 运行:应用启动完成,监听端口;
6. 关闭:收到停止信号(如Ctrl+C),执行销毁钩子(@PreDestroy),释放资源。
2.Spring事务的实现原理是什么?
基于AOP代理实现。
1. 启动时,Spring扫描带@Transactional注解的方法,为目标类创建动态代理(JDK动态代理或CGLIB);
2. 调用代理方法时,先通过事务管理器(PlatformTransactionManager)开启事务,设置隔离级别、传播行为;
3. 执行目标方法,若成功则提交事务,若抛出异常(非checked异常)则回滚事务;
4. 事务控制通过ThreadLocal存储事务上下文,确保线程内事务独立。
3.spring里面用了哪些设计模式?
1. 单例模式(Bean默认单例);
2. 工厂模式(BeanFactory、ApplicationContext创建Bean);
3. 代理模式(AOP动态代理);
4. 模板方法模式(JdbcTemplate、RestTemplate);
5. 观察者模式(事件监听机制,如ApplicationEvent);
6. 策略模式(事务管理器、资源加载器)。
4.spring的循环依赖问题,请描述问题出现的场景,以及你是如何排查和解决的。
场景:例如ServiceA依赖ServiceB,ServiceB又依赖ServiceA,启动时Spring无法完成Bean初始化。排查:通过Spring启动日志查看“Circular reference”异常,定位循环依赖的Bean。
解决:1. 使用@Lazy注解(延迟加载依赖Bean);2. 改用Setter注入或字段注入(避免构造器注入循环);3. 拆分依赖,提取公共逻辑到第三方Bean,打破循环。

浙公网安备 33010602011771号