Spring使用到的设计模式

2023-05-16

Spring涉及到的设计模式

  1. 简单工厂模式
  2. 工厂模式
  3. 单例模式
  4. 适配器
  5. 装饰器模式 Decortor
  6. 代理模式
  7. 观察者模式
  8. 策略模式
  9. 模板模式

 

  1. 简单工厂模式
    • 一个工厂类根据传入的参数,动态决定创建哪一个类
      
      public abstract class AbstractBeanFactory extends ***{
      //根据传入的名字 创建某个类
          @Override
          public Object getBean(String name,……) throws BeansException {
          // doGetBean才是真正向IoC容器获取被管理Bean的过程  
              return doGetBean(name, null, null, false);
          }
      }
      }
      
      
      
  2. 工厂模式
    • 将对象的创建及初始化交给工厂对象
      
      public abstract class AbstractAutowireCapableBeanFactory(){
          
         protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) {
               // 1.利用工厂模式进行实例化
              if (mbd.getFactoryMethodName() != null)  {
                  return instantiateUsingFactoryMethod(beanName, mbd, args);
              }
              
          根据不同的条件进行实例化
               
      }
      
  3. 单例模式
    • 比如在创建bean的时候。
  4. 适配器
    • aop中生成代理对象前,设置拦截器,通过拦截器中的内容增强了代理方法的功能。
      Adapter类接口:Target
      public interface AdvisorAdapter {
       
      boolean supportsAdvice(Advice advice);
       
            MethodInterceptor getInterceptor(Advisor advisor);
       
      }
      
      MethodBeforeAdviceAdapter类,Adapter
      
      class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {
       
            public boolean supportsAdvice(Advice advice) {
                  return (advice instanceof MethodBeforeAdvice);
            }
       
            public MethodInterceptor getInterceptor(Advisor advisor) {
                  MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice();
            return new MethodBeforeAdviceInterceptor(advice);
            }
       
      }
      
      
  5. 装饰器模式 Decortor
    • 我们的项目需要访问不同的数据库。如何动态的切换不同的数据源呢
      spring用到的包装器模式在类名上有两种表现,一种含有 Wrapper 另一种 Decorator
      基本上都是动态的给一个对象添加些额外的职责
      一种是
      applicationContext中配置所有的dataSource 可能是不同类型的,比如不同的数据库
      
      二是 org.springframework.jndi.JndiObjectFactoryBean
      sessionFactory根据用户的每次请求,将dataSource设成不同的数据源
      
  6. 代理模式

    Spring AOP 利用了 AspectJ AOP实现的! AspectJ AOP 的底层用了动态代理
    动态代理有两种
    目标方法有接口时候自动选用 JDK 动态代理
    目标方法没有接口时候选择 CGLib 动态代理

  7. 观察者模式

    定义对象间的一对多的依赖关系,当一个对象状态发生变化时,所有依赖他的对象都会被通知并更新

    spring中Observer模式常用的地方是listener的实现。如ApplicationListener。
  8. 策略模式
    ApplicationContex接口实现有ClassPathXmlApplicationContext和FileSystemXmlApplicationContext类
    根据beans.xml的文件路径来选择使用哪一个实现方法
    --ClassPathXmlApplicationContext:从类的路径下加载配置文件
    --FileSystemXmlApplicationContext:从文件系统路径下加载文件


     
  9. 模板模式:定义一个操作中算法的框架,实现延伸到子类

    spring中的jdbcTemplate中excute

    Template Method模式一般是需要继承的。这里想要探讨另一种对Template Method的理解。spring中的JdbcTemplate,在用这个类时并不想去继承这个类,因为这个类的方法太多,但是我们还是想用到JdbcTemplate已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方法中。但是变化的东西是一段代码,而且这段代码会用到JdbcTemplate中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵JdbcTemplate中变量的方法,我们去实现这个方法,就把变化的东西集中到这里了。然后我们再传入这个回调对象到JdbcTemplate,从而完成了调用。这可能是Template Method不需要继承的另一种实现方式吧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring使用到的设计模式 的相关文章

随机推荐

  • 学习CSS后总结

    目录 一 CSS简介二 CSS语法三 CSS的生效方式四 CSS实际使用1 颜色 尺寸 对齐2 盒子模型3 边框与边距4 定位5 溢出6 浮动7 透明度8 组合选择器9 伪类和伪元素 一 CSS简介 CSS是级联样式表 xff08 Casc
  • 《通信软件开发与应用》课程结业报告

    目录 一 作业内容二 完成过程三 问题及解决办法四 仍然存在的问题五 总结 一 作业内容 要求 xff1a 完成一个静态网站的制作 可使用你喜欢的任何CSS框架如BootStrap MDB tailwind等 xff0c 页面不少于5个 x
  • prometheus + grafana 监控Mysql、主机、Redis超简入门

    文章目录 grafana安装启动如何导入需要的dashboard prometheus安装集成grafanaExportermysqld exporter安装配置 node exporterredis exporter grafana 安装
  • 地址栏中输入IP地址提示指定的网络名不再可用的解决方法

    在日常工作中 xff0c 我们有的时候为了省去在网上邻居查找相关资料的麻烦 xff0c 一般都直接在地址栏中输入远程地址 xff0c 如192 168 1 100 F xff0c 可有的时候偏偏输入地址后却提示 指定的网络名不再可用 的问题
  • ubuntu18.04添加用户

    文章目录 前言一 创建用户目录二 修改用户权限 前言 笔记 在远程服务的时候经常遇到用户登入冲突的情况 xff0c 在此做了总结 一 创建用户目录 span class token comment 创建deepstream user spa
  • 详细介绍如何在ROS 中使用自定义 msg 消息

    首先我们对Ros中的msg 消息做以简单的回顾 xff1a msg 消息是 ROS topic 通讯时 xff0c 节点之间进行传递的内容 msg 消息描述的是业务之间传递数据 xff0c 也可以理解为业务之间数据的抽象化 常见 Msg 消
  • linux下的信号量操作示例

    include lt sys types h gt include lt sys ipc h gt include lt sys sem h gt include lt pthread h gt include lt errno h gt
  • 用户行为分析的指标及其意义

    什么是用户行为 xff1f 用户行为由最简单的五个元素构成 xff0c 我们可以简单地记为3W2H xff1a 时间 xff08 When xff09 地点 xff08 Where xff09 人物 xff08 Who xff09 交互 x
  • 二层漫游和三层漫游(转载)

    漫游域 根据STA是否在同一个子网内漫游 xff0c 可以将漫游分为二层漫游和三层漫游 不同子网之间的漫游是三层漫游 xff08 同一个VLAN pool内的漫游仍然属于二层漫游 xff09 网络中有时候会出现以下情况 xff1a 两个子网
  • HTML DOM 事件

    1 HTML DOM 事件 参考文档 xff1a https www runoob com jsref dom obj event html HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序 事件通常与
  • 用户分类以及用户活跃度的衡量方法

    一个APP最根本的便是用户 xff0c 那么当然用户也分许多种类 xff0c 比如活跃用户 留存用户 流失用户等等 xff0c 那么一般情况下又是怎么来分析活跃用户的呢 xff1f 首先 xff0c 我们来看一下用户的具体分类 不同类型的用
  • 什么是用户标签?其实很好理解

    用户画像与用户标签 亚马逊的CEO Jeff Bezos曾说过他的梦想 xff0c 如果我有一百万的用户 xff0c 我就会做一百万个不同的网站 xff01 xff0c 做这个的基础是先对用户打标签 什么是用户画像呢 xff1f 就是根据某
  • 用户标签体系的意义及设计方法

    我们这次重点谈一下用户标签 对于市场层面 xff0c 用户标签能帮助我们什么 xff1f 1 完善数据仓 之前我们讲过 xff0c 企业或市场要有自己的数据仓来进行线索的存储与培育 xff0c 用户标签就是存在于此 xff0c 我们希望用户
  • 如何设计数据埋点方案?知道这2步就行了

    数据埋点是什么 xff1f 数据埋点是数据产品经理 数据运营以及数据分析师 xff0c 基于业务需求 xff08 例如 xff1a CPC点击付费广告中统计每一个广告位的点击次数 xff09 xff0c 产品需求 xff08 例如 xff1
  • 什么是UTM参数?这些你知道吗

    现在移动互联网发展比较迅速 xff0c 而且现在很多人都在做公众号 xff0c 公众号也要有自己的特色 xff0c 这样才能给自己的产品带来利益 现在也有很多的人关注APP运营 xff0c APP运营工作中的每一步都会讲求ROI xff08
  • 用户触达方式及用户触达渠道选择

    任何用户运营过程总离不开用户触达渠道的连接 可以说 xff0c 触达渠道的组合选择 xff0c 是与你最终运营效果直接挂钩的 xff0c 用户触达方式的选择直接影响了你运营的结果 如何做精准的用户触达 如何选择不同的用户触达方式 如何最大限
  • 用户行为分析之渠道分析、转化分析、留存分析

    数据分析脱离不了业务 xff0c 不同的业务所关注的数据不同 xff0c 比如互联网 快消等 xff0c 行业不同 xff0c 关注的数据点也不同 在互联网行业普遍产品的数据分析中 xff0c 我认为用户行为分析最重要的三个点是渠道分析 转
  • 通过用户分级实现精细化运营

    10年前 xff0c pc互联网时代 xff0c 当你浏览百度的网页 xff0c 你会普遍看到各种插件推广 弹窗广告等等 xff0c 这些弹窗就好似牛皮癣一样 xff0c 想关掉都不行 用户体验极其不好 xff0c 这是一个 卖方 占绝对优
  • 如何进行流失用户召回?做到这三步!

    如果按照每天渠道投放获客1000名 xff0c 次日留存率40 来算 xff0c 每天会有60 的用户 xff0c 第二天就再也不打开我们的APP xff0c 最终成为了流失用户 平均每日损失几百到数万元不等 虽然相比动辄几百万到几千万的融
  • Spring使用到的设计模式

    Spring涉及到的设计模式 简单工厂模式工厂模式单例模式适配器装饰器模式 Decortor代理模式观察者模式策略模式模板模式 简单工厂模式 一个工厂类根据传入的参数 xff0c 动态决定创建哪一个类 public abstract cla