BeanFactory是基础工厂模块,用于轻量级场景下的延迟加载Bean创建与依赖注入;ApplicationContext是增强工厂模块,在BeanFactory基础上集成事件、AOP、国际化等企业能力,启动时预实例化单例Bean,适用于主流应用开发;FactoryBean是“工厂的工厂”模块,用于封装复杂对象(如SqlSessionFactory)的创建逻辑,使第三方资源纳入Spring生命周期统一管理。

直接点说:别只罗列模式名称,要讲清楚“哪个模块用、怎么用、为什么这么用”。面试官想听的是你对 Spring 架构逻辑的理解,不是背书。
工厂模式:IoC 容器的本质
Spring 的 BeanFactory 和 ApplicationContext 都是工厂模式的落地。但关键不在“它叫工厂”,而在于它如何解决实际问题:
- BeanFactory 是基础工厂,只管对象创建和依赖注入,轻量但功能有限
- ApplicationContext 是增强型工厂,除了创建 Bean,还集成事件发布、国际化、AOP 织入等企业级能力
- FactoryBean 是工厂的工厂——用于创建复杂对象(比如 MyBatis 的 SqlSessionFactory、连接池),它把创建逻辑封装起来,让容器统一管理生命周期
代理模式:AOP 的实现根基
@Transactional、@Cacheable 这些注解背后全是代理在干活:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 接口存在时,Spring 默认用 JDK 动态代理(基于接口)
- 没有接口或需要代理类方法时,自动切到 CGLIB(生成子类)
- 真正执行业务方法前,代理会插入事务开启、日志记录、权限校验等横切逻辑
- 注意:自调用失效问题,就是因为代理对象没被 Spring 管理,绕过了代理链
模板方法模式:简化重复操作
像 JdbcTemplate、JmsTemplate、RestTemplate 这些类,都用了模板方法:
立即学习“Java免费学习笔记(深入)”;
- 把固定流程(如获取连接、异常转换、资源释放)写死在模板里
- 把可变部分(SQL 执行、消息处理逻辑)留给用户通过回调或 Lambda 实现
- 既避免了 JDBC 手动 try-catch-finally 的样板代码,又保证了资源安全释放
其他高频模式一句话定位
不用展开讲,但要点出场景和价值:
- 单例模式:默认 Bean 作用域,容器内唯一实例,降低内存开销,配合线程安全设计(如无状态 Service)
- 策略模式:PlatformTransactionManager 接口下有 DataSourceTransactionManager、JtaTransactionManager 等多种实现,运行时按配置切换
- 观察者模式:ApplicationEventPublisher / ApplicationListener,用于解耦组件间通信(如登录成功后发短信、写日志)
- 适配器模式:HandlerAdapter 适配不同类型的 Controller(@Controller、@RestController、函数式 Web Handler)

















