Spring框架中都用到了哪些设计模式 ?

你的名字 2024-04-01 18:24 164阅读 0赞
  1. 简单工厂模式
    简单工厂模式的本质就是一个工厂类根据传入的参数,动态的决定实例化哪个类。

Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象。

  1. 工厂方法模式
    应用程序将对象的创建及初始化职责交给工厂对象,工厂Bean。

定义工厂方法,然后通过config.xml配置文件,将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称。

  1. 单例模式
    Spring用的是双重判断加锁的单例模式,通过getSingleton方法从singletonObjects中获取bean。

    /**

    • Return the (raw) singleton object registered under the given name.
    • Checks already instantiated singletons and also allows for an early

    • reference to a currently created singleton (resolving a circular reference).
    • @param beanName the name of the bean to look for
    • @param allowEarlyReference whether early references should be created or not
    • @return the registered singleton object, or {@code null} if none found
      */
      protected Object getSingleton(String beanName, boolean allowEarlyReference) {
      Object singletonObject = this.singletonObjects.get(beanName);
      if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
      1. synchronized (this.singletonObjects) {
      2. singletonObject = this.earlySingletonObjects.get(beanName);
      3. if (singletonObject == null && allowEarlyReference) {
      4. ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);
      5. if (singletonFactory != null) {
      6. singletonObject = singletonFactory.getObject();
      7. this.earlySingletonObjects.put(beanName, singletonObject);
      8. this.singletonFactories.remove(beanName);
      9. }
      10. }
      11. }
      }
      return (singletonObject != NULL_OBJECT ? singletonObject : null);
      }
  2. 代理模式
    Spring的AOP中,使用的Advice(通知)来增强被代理类的功能。Spring实现AOP功能的原理就是代理模式(① JDK动态代理,② CGLIB字节码生成技术代理。)对类进行方法级别的切面增强。

  3. 装饰器模式
    装饰器模式:动态的给一个对象添加一些额外的功能。

Spring的ApplicationContext中配置所有的DataSource。这些DataSource可能是不同的数据库,然后SessionFactory根据用户的每次请求,将DataSource设置成不同的数据源,以达到切换数据源的目的。

在Spring中有两种表现:

一种是类名中含有Wrapper;
另一种是类名中含有Decorator。

  1. 观察者模式
    定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。Spring中观察者模式一般用在listener的实现。

  2. 策略模式
    策略模式是行为性模式,调用不同的方法,适应行为的变化 ,强调父类的调用子类的特性 。

getHandler是HandlerMapping接口中的唯一方法,用于根据请求找到匹配的处理器。

  1. 模板方法模式
    Spring JdbcTemplate的query方法总体结构是一个模板方法+回调函数,query方法中调用的execute()是一个模板方法,而预期的回调doInStatement(Statement state)方法也是一个模板方法。

发表评论

表情:
评论列表 (有 0 条评论,164人围观)

还没有评论,来说两句吧...

相关阅读