【发布时间】:2009-04-16 10:40:42
【问题描述】:
Spring框架中使用了哪些设计模式?
【问题讨论】:
-
它包含了..MVC、Front controller、View Helper、Singleton、Prototype、Factory等10多种模式。 javabench.in/2012/02/design-patterns-being-used-in-spring.html
Spring框架中使用了哪些设计模式?
【问题讨论】:
使用了很多不同的设计模式,但有一些明显的:
单例 - spring 配置文件中定义的 bean 默认为单例。
模板方法 - 广泛用于处理样板重复代码(例如干净地关闭连接等)。例如JdbcTemplate、JmsTemplate、JpaTemplate。
更新以下 cmets:对于 MVC,您可能需要阅读 MVC Reference
在 MVC 中使用的一些明显模式:
Model View Controller :-) 。 Spring MVC 的优势在于您的控制器是 POJO,而不是 servlet。这使得控制器的测试更容易。需要注意的一点是,控制器只需要返回一个逻辑视图名称,视图选择留给单独的ViewResolver。这样可以更轻松地为不同的视图技术重用控制器。
Front Controller。 Spring 提供DispatcherServlet 以确保将传入的请求分派到您的控制器。
View Helper - Spring 有许多自定义 JSP 标记和速度宏,以帮助将代码与视图中的呈现分开。
【讨论】:
Foo 并且您检索每个上下文的 Foo 实例,您将获得两个不同的对象引用。相反,这里应用的设计模式是flyweight
当然还有依赖注入或 IoC(控制反转),它是整个 BeanFactory/ApplicationContext 东西的核心。
【讨论】:
DI 的东西实际上是某种策略模式。每当您想成为一些可交换的逻辑/实现时,您通常会在宿主类上找到一个接口和适当的 setter 方法来连接该接口的自定义实现。
【讨论】:
Spring 是最佳实践 API 模式的集合,只要你的手臂,你就可以写出它们的购物清单。 API 的设计方式鼓励您(但不强迫您)遵循这些模式,并且有一半时间您在不知道自己这样做的情况下遵循它们。
【讨论】:
Service Locator Pattern - ServiceLocatorFactoryBean 保存上下文中所有 bean 的信息。当客户端代码使用名称请求服务(bean)时,它只是在上下文中找到该 bean 并返回它。客户端代码不需要写spring相关的代码来定位一个bean。
【讨论】:
Observer-Observable:用于ApplicationContext的事件机制
【讨论】:
工厂模式也用于通过 BeanFactory 和应用程序上下文加载 bean。
【讨论】:
Factory Method模式:创建对象实例的BeanFactory 单例:实例类型可以是上下文的单例 原型:实例类型可以是原型。 建造者模式:你也可以在一个类中定义一个方法来负责创建复杂的实例。
【讨论】:
Spring 容器根据 bean 范围(单例、原型等)生成 bean 对象。所以这看起来像是实现Abstract Factory pattern。在 Spring 的内部实现中,我确信每个作用域都应该绑定到特定的工厂类。
【讨论】: