Skip to content

设计模式应用 ​

深入理解Spring框架中应用的设计模式,包括工厂模式、单例模式、代理模式、模板方法模式、策略模式、观察者模式等,通过学习这些模式理解Spring的设计思想。

📋 设计模式概览 ​

Spring框架大量使用了设计模式,这些模式使Spring具有高度的可扩展性和灵活性。

🎯 一、工厂模式 ​

1.1 BeanFactory ​

BeanFactory是工厂模式的典型应用,用于创建和管理Bean:

java
public interface BeanFactory {
    Object getBean(String name) throws BeansException;
    <T> T getBean(Class<T> requiredType) throws BeansException;
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
}

1.2 FactoryBean ​

FactoryBean允许用户自定义Bean的创建逻辑:

java
public interface FactoryBean<T> {
    T getObject() throws Exception;
    Class<?> getObjectType();
    boolean isSingleton();
}

应用场景:

  • MyBatis的SqlSessionFactory
  • Hibernate的SessionFactory
  • 复杂对象的创建

🎯 二、单例模式 ​

2.1 单例Bean ​

Spring默认使用单例模式管理Bean,通过singletonObjects缓存单例Bean:

java
private final Map<String, Object> singletonObjects = 
        new ConcurrentHashMap<>(256);

2.2 单例实现 ​

单例Bean在容器中只创建一次,后续获取都返回同一个实例。

🎯 三、代理模式 ​

3.1 AOP代理 ​

Spring AOP使用代理模式实现横切关注点:

  • JDK动态代理:基于接口实现
  • CGLIB代理:基于类继承实现

3.2 代理应用 ​

  • 事务管理
  • 日志记录
  • 性能监控
  • 权限控制

🎯 四、模板方法模式 ​

4.1 AbstractApplicationContext ​

AbstractApplicationContext.refresh()方法是模板方法模式的典型应用:

java
public void refresh() throws BeansException {
    // 1. 准备刷新(模板方法)
    prepareRefresh();
    
    // 2. 获取BeanFactory(抽象方法,由子类实现)
    ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
    
    // 3. 准备BeanFactory(模板方法)
    prepareBeanFactory(beanFactory);
    
    // ... 其他步骤
    
    // 9. 子类扩展点(钩子方法)
    onRefresh();
    
    // ... 其他步骤
}

4.2 模板方法模式应用 ​

  • AbstractApplicationContext.refresh()
  • AbstractBeanFactory.getBean()
  • AbstractAutowireCapableBeanFactory.createBean()

🎯 五、策略模式 ​

5.1 BeanPostProcessor ​

BeanPostProcessor是策略模式的典型应用,不同的处理器实现不同的处理策略:

java
public interface BeanPostProcessor {
    Object postProcessBeforeInitialization(Object bean, String beanName) 
            throws BeansException;
    Object postProcessAfterInitialization(Object bean, String beanName) 
            throws BeansException;
}

5.2 策略模式应用 ​

  • 不同的BeanPostProcessor实现不同的处理逻辑
  • 不同的TransactionManager实现不同的事务管理策略
  • 不同的Converter实现不同的类型转换策略

🎯 六、观察者模式 ​

6.1 事件机制 ​

Spring的事件机制是观察者模式的典型应用:

java
public interface ApplicationEventPublisher {
    void publishEvent(ApplicationEvent event);
}

public interface ApplicationListener<E extends ApplicationEvent> 
        extends EventListener {
    void onApplicationEvent(E event);
}

6.2 事件应用 ​

  • ContextRefreshedEvent:容器刷新事件
  • ContextStartedEvent:容器启动事件
  • ContextStoppedEvent:容器停止事件

🎯 七、责任链模式 ​

7.1 HandlerInterceptor ​

Spring MVC的拦截器链是责任链模式的应用:

java
public interface HandlerInterceptor {
    boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
            Object handler) throws Exception;
    
    void postHandle(HttpServletRequest request, HttpServletResponse response, 
            Object handler, ModelAndView modelAndView) throws Exception;
    
    void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
            Object handler, Exception ex) throws Exception;
}

7.2 责任链应用 ​

  • 拦截器链
  • Filter链
  • AOP拦截器链

📖 学习资源 ​

视频教程 ​

书籍推荐 ​

  • 《设计模式:可复用面向对象软件的基础》 - GoF
  • 《Spring源码深度解析》 - 郝佳

网站资源 ​

✅ 学习检查清单 ​

  • [ ] 已理解工厂模式在Spring中的应用
  • [ ] 已理解单例模式在Spring中的应用
  • [ ] 已理解代理模式在Spring中的应用
  • [ ] 已理解模板方法模式在Spring中的应用
  • [ ] 已理解策略模式在Spring中的应用
  • [ ] 已理解观察者模式在Spring中的应用
  • [ ] 已理解责任链模式在Spring中的应用
  • [ ] 已总结设计模式应用场景

上一章节:循环依赖处理
返回目录:Spring源码深度解析