【问题标题】:What design patterns are used in Spring framework? [closed]Spring框架中使用了哪些设计模式? [关闭]
【发布时间】:2009-04-16 10:40:42
【问题描述】:

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

【问题讨论】:

标签: design-patterns spring


【解决方案1】:

使用了很多不同的设计模式,但有一些明显的:

  • 代理 - 在 AOPremoting 中大量使用。

  • 单例 - spring 配置文件中定义的 bean 默认为单例。

  • 模板方法 - 广泛用于处理样板重复代码(例如干净地关闭连接等)。例如JdbcTemplateJmsTemplateJpaTemplate


更新以下 cmets:对于 MVC,您可能需要阅读 MVC Reference

在 MVC 中使用的一些明显模式:

  • Model View Controller :-) 。 Spring MVC 的优势在于您的控制器是 POJO,而不是 servlet。这使得控制器的测试更容易。需要注意的一点是,控制器只需要返回一个逻辑视图名称,视图选择留给单独的ViewResolver。这样可以更轻松地为不同的视图技术重用控制器。

  • Front Controller。 Spring 提供DispatcherServlet 以确保将传入的请求分派到您的控制器。

  • View Helper - Spring 有许多自定义 JSP 标记和速度宏,以帮助将代码与视图中的呈现分开。

【讨论】:

  • 谢谢,Spring MVC 模块中使用了哪些设计模式?
  • 我不认为 Spring 为 bean 实现了单例。请注意,单例范围的 bean 每个应用程序上下文将有一个实例。因此,如果您的应用程序有两个 Spring 上下文,它们加载相同的单例 bean Foo 并且您检索每个上下文的 Foo 实例,您将获得两个不同的对象引用。相反,这里应用的设计模式是flyweight
  • @Luiggi Mendoza 你的意思是 spring 没有单例对象?请向我解释一下。
  • @KumaresanPerumal 单例模式和单例实例之间存在显着差异(注意大写/小写 S)。单例模式是关于在整个应用程序中维护对象的单个实例。 Spring 在检测到单例 bean 时所做的是每个应用程序上下文创建一个实例。应用程序上下文是 Spring 的核心组件,用于委托对象的创建和检索。每个应用程序上下文只创建一次单例 bean。
  • 模型视图控制器、前端控制器和视图的链接帮助转到oracle.com/technetwork/java/index.html。您能否使用有效链接更新答案?
【解决方案2】:

当然还有依赖注入或 IoC(控制反转),它是整个 BeanFactory/ApplicationContext 东西的核心。

【讨论】:

    【解决方案3】:

    DI 的东西实际上是某种策略模式。每当您想成为一些可交换的逻辑/实现时,您通常会在宿主类上找到一个接口和适当的 setter 方法来连接该接口的自定义实现。

    【讨论】:

    • 大师自己的回答。 @Oliver 你能在这里说明更多模式吗?
    【解决方案4】:

    Spring 是最佳实践 API 模式的集合,只要你的手臂,你就可以写出它们的购物清单。 API 的设计方式鼓励您(但不强迫您)遵循这些模式,并且有一半时间您在不知道自己这样做的情况下遵循它们。

    【讨论】:

      【解决方案5】:

      Service Locator Pattern - ServiceLocatorFactoryBean 保存上下文中所有 bean 的信息。当客户端代码使用名称请求服务(bean)时,它只是在上下文中找到该 bean 并返回它。客户端代码不需要写spring相关的代码来定位一个bean。

      【讨论】:

        【解决方案6】:

        Observer-Observable:用于ApplicationContext的事件机制

        【讨论】:

          【解决方案7】:

          工厂模式也用于通过 BeanFactory 和应用程序上下文加载 bean。

          【讨论】:

            【解决方案8】:

            Factory Method模式:创建对象实例的BeanFactory 单例:实例类型可以是上下文的单例 原型:实例类型可以是原型。 建造者模式:你也可以在一个类中定义一个方法来负责创建复杂的实例。

            【讨论】:

              【解决方案9】:

              Spring 容器根据 bean 范围(单例、原型等)生成 bean 对象。所以这看起来像是实现Abstract Factory pattern。在 Spring 的内部实现中,我确信每个作用域都应该绑定到特定的工厂类。

              【讨论】:

                猜你喜欢
                • 2014-02-26
                • 2011-06-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多