🚀 Spring设计模式大揭秘:23种模式藏在你每天在用的框架里
🎯 引言
💡 设计模式太抽象?Spring源码来帮忙!
还在为设计模式的概念而头疼吗?还在觉得设计模式离实际开发太远吗?
今天,我们用Spring源码说话! 🎉
🎭 一个小故事
小王:“小李,你对Spring中的设计模式了解多少?”
小李:“额…我只知道几个概念,什么IoC、AOP、依赖注入,但具体用了什么设计模式完全不知道…”
小王:"别慌! 其实你每天都在用Spring的设计模式,只是你不知道而已!"
小王:当你写 @Autowired
时,你在用依赖注入模式
小王:当你写 @Transactional
时,你在用代理模式
小王:当你写 ApplicationContext.getBean()
时,你在用工厂模式
小李:“哇!原来Spring框架本身就是设计模式的集合?突然觉得也没那么神秘了!” 😄
本文将为您揭秘Spring框架中23种经典设计模式的真实应用场景。通过这个精心整理的对应表,您将发现:
- 🎨 设计模式就在身边:每天使用的
@Autowired
、@Transactional
、ApplicationContext
等都在用设计模式 - 🚀 从抽象到具体:让抽象的设计模式概念变得触手可及
- 📚 最佳学习教材:Spring源码就是设计模式的最佳实践案例
- ⚡ 快速掌握技巧:一张表搞定23种设计模式,效率翻倍!
准备好了吗?让我们一起揭开Spring框架中设计模式的神秘面纱! 🔍
设计模式分类与Spring实现对照表
🎯 小贴士:这些设计模式就像"对象诞生的魔法师",负责创建和管理对象的生命周期
创建型模式(5种)
设计模式 | Spring中的具体应用 | 核心类/接口(包名) |
---|---|---|
单例模式 | Bean作用域、ApplicationContext | ApplicationContext (org.springframework.context )BeanFactory (org.springframework.beans.factory )DefaultSingletonBeanRegistry (org.springframework.beans.factory.support ) |
工厂模式 | BeanFactory、ApplicationContext、FactoryBean | BeanFactory.getBean() (org.springframework.beans.factory )ApplicationContext.getBean() (org.springframework.context )FactoryBean.getObject() (org.springframework.beans.factory ) |
抽象工厂模式 | BeanDefinitionRegistry、BeanFactory层次结构 | BeanDefinitionRegistry (org.springframework.beans.factory.support )ListableBeanFactory (org.springframework.beans.factory )HierarchicalBeanFactory (org.springframework.beans.factory ) |
建造者模式 | BeanDefinitionBuilder、XmlBeanDefinitionReader | BeanDefinitionBuilder (org.springframework.beans.factory.support )XmlBeanDefinitionReader (org.springframework.beans.factory.xml ) |
原型模式 | Bean作用域prototype、Object.clone() | Bean作用域prototype (org.springframework.beans.factory.config )AbstractBeanDefinition.cloneBeanDefinition() (org.springframework.beans.factory.support ) |
结构型模式(7种)
🏗️ 小贴士:这些设计模式就像"代码架构的魔法师",负责组织和管理对象之间的关系
设计模式 | Spring中的具体应用 | 核心类/接口(包名) |
---|---|---|
适配器模式 | HandlerAdapter、AdvisorAdapter | HandlerAdapter.handle() (org.springframework.web.servlet )AdvisorAdapter.getAdvice() (org.springframework.aop.framework.adapter ) |
装饰器模式 | BeanPostProcessor、BeanFactoryPostProcessor | BeanPostProcessor.postProcessBeforeInitialization() (org.springframework.beans.factory.config )BeanFactoryPostProcessor.postProcessBeanFactory() (org.springframework.beans.factory.config ) |
代理模式 | AOP代理、JDK动态代理、CGLIB代理 | ProxyFactory (org.springframework.aop.framework )JdkDynamicAopProxy (org.springframework.aop.framework )CglibAopProxy (org.springframework.aop.framework ) |
桥接模式 | 数据源桥接、事务管理器桥接 | DataSourceTransactionManager (org.springframework.jdbc.datasource )JpaTransactionManager (org.springframework.orm.jpa ) |
组合模式 | CompositeCacheManager、CompositeTransactionManager | CompositeCacheManager (org.springframework.cache.support )CompositeTransactionManager (org.springframework.transaction.support ) |
外观模式 | ApplicationContext、JdbcTemplate | ApplicationContext (org.springframework.context )JdbcTemplate (org.springframework.jdbc.core )TransactionTemplate (org.springframework.transaction.support ) |
享元模式 | Bean缓存、元数据缓存 | DefaultSingletonBeanRegistry.getSingleton() (org.springframework.beans.factory.support )CachedIntrospectionResults (org.springframework.core.type.classreading ) |
行为型模式(11种)
💃 小贴士:这些设计模式就像"对象协作的舞蹈家",负责协调对象之间的交互和通信
设计模式 | Spring中的具体应用 | 核心类/接口(包名) |
---|---|---|
观察者模式 | ApplicationEvent、ApplicationListener | ApplicationEvent (org.springframework.context.event )ApplicationListener (org.springframework.context.event ) |
策略模式 | TransactionManager、CacheManager | PlatformTransactionManager (org.springframework.transaction )CacheManager (org.springframework.cache ) |
命令模式 | CommandLineRunner、ApplicationRunner | CommandLineRunner.run() (org.springframework.boot )ApplicationRunner.run() (org.springframework.boot ) |
状态模式 | Bean生命周期状态、事务状态 | Bean生命周期状态管理 (org.springframework.beans.factory.config )TransactionStatus状态管理 (org.springframework.transaction ) |
模板方法模式 | JdbcTemplate、TransactionTemplate | JdbcTemplate.execute() (org.springframework.jdbc.core )TransactionTemplate.execute() (org.springframework.transaction.support ) |
迭代器模式 | BeanDefinitionIterator、PropertySource迭代 | BeanDefinitionIterator (org.springframework.beans.factory.support )PropertySource迭代 (org.springframework.core.env ) |
责任链模式 | Filter链、Interceptor链 | FilterChain (org.springframework.web.filter )HandlerInterceptor链 (org.springframework.web.servlet ) |
中介者模式 | ApplicationContext组件通信 | ApplicationContext (org.springframework.context )BeanFactory组件通信 (org.springframework.beans.factory ) |
访问者模式 | BeanDefinitionVisitor、注解访问 | BeanDefinitionVisitor (org.springframework.beans.factory.support )注解处理器 (org.springframework.core.annotation ) |
备忘录模式 | Bean状态保存、事务状态保存 | Bean状态管理 (org.springframework.beans.factory.config )TransactionStatus保存 (org.springframework.transaction ) |
解释器模式 | SpEL表达式解析、配置文件解析 | SpelExpressionParser (org.springframework.expression )配置文件解析器 (org.springframework.core.io.support ) |
🧭 快速查找指南
🎯 快速导航小贴士:就像游戏里的地图,帮你快速找到想要的设计模式!
按功能查找
- Bean管理:单例模式、工厂模式、建造者模式、原型模式
- AOP功能:代理模式、装饰器模式、责任链模式
- 事务管理:策略模式、状态模式、模板方法模式
- 事件处理:观察者模式、命令模式
按包名查找(重点推荐)
- org.springframework.beans.factory:单例模式、工厂模式、建造者模式、原型模式
- org.springframework.aop:代理模式、装饰器模式、责任链模式
- org.springframework.context:观察者模式、外观模式、中介者模式
- org.springframework.transaction:策略模式、状态模式、模板方法模式
💡 小技巧:如果你经常用某个Spring模块,可以先从这个模块开始学习设计模式!
🌟 Spring设计模式实战案例
1. 单例模式 - Bean作用域管理
// Spring默认单例Bean
@Component
public class UserService {
// 这个Bean在Spring容器中只有一个实例
}
// 通过@Scope指定作用域
@Component
@Scope("singleton") // 默认值,可以不写
public class OrderService {
// 单例Bean
}
核心实现:DefaultSingletonBeanRegistry.getSingleton()
2. 工厂模式 - BeanFactory
// 通过BeanFactory获取Bean
@Autowired
private BeanFactory beanFactory;
public void example() {
UserService userService = beanFactory.getBean("userService", UserService.class);
// 这就是工厂模式的应用
}
核心实现:BeanFactory.getBean()
3. 代理模式 - AOP实现
@Service
@Transactional // 这个注解会创建代理对象
public class UserService {
public void createUser(User user) {
// 方法执行前会开启事务
// 方法执行后会提交或回滚事务
}
}
核心实现:ProxyFactory
、JdkDynamicAopProxy
、CglibAopProxy
4. 观察者模式 - 事件机制
// 发布事件
@Component
public class UserService {
@Autowired
private ApplicationEventPublisher eventPublisher;
public void createUser(User user) {
// 创建用户后发布事件
eventPublisher.publishEvent(new UserCreatedEvent(user));
}
}
// 监听事件
@Component
public class UserEventListener implements ApplicationListener<UserCreatedEvent> {
@Override
public void onApplicationEvent(UserCreatedEvent event) {
// 处理用户创建事件
System.out.println("用户创建了:" + event.getUser().getName());
}
}
核心实现:ApplicationEventPublisher
、ApplicationListener
5. 策略模式 - 事务管理
// 不同的事务管理器策略
@Configuration
public class TransactionConfig {
@Bean
@Primary
public PlatformTransactionManager jdbcTransactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public PlatformTransactionManager jpaTransactionManager(EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
核心实现:PlatformTransactionManager
接口的不同实现
🎉 总结
恭喜您! 🎊 现在您已经拥有了Spring框架中23种设计模式的完整地图!
💪 记住这句话
“Spring框架本身就是设计模式的活教材!学习Spring就是学习设计模式!”
🎭 一个小彩蛋
小王:小李,现在你对Spring中设计模式的理解怎么样?
小李:“太棒了!现在我可以自信地说:我每天都在用Spring的设计模式!比如…”
小王:看来你已经掌握了Spring设计模式的精髓!
现在,您已经站在了Spring设计模式学习的制高点! 🏆