Spring框架中使用的设计模式

您好,哈布罗夫斯克市民! 漫长的周末已经结束,这意味着该分享一个有用的新翻译了。 今天我们将讨论Spring框架中使用的设计模式。 您可能已经猜到了,该材料专用于开始在5月28日开始的“ Spring Framework开发人员”课程中招募一个新小组。 让我们开始吧。



在本文中,我们将回顾Spring框架中广泛使用的几种设计模式。 设计模式描述了面向对象软件开发中的编程技术。


以下是Spring框架中使用的一些知名模式:


  • 代理(副)
  • 辛格尔顿
  • 工厂工厂
  • 范本
  • 模型视图控制器
  • 前控制器
  • 查看助手
  • 依赖注入和控制反转(IoC)(依赖注入和控制反转)
  • 服务定位器
  • 观察者可观察
  • 上下文对象

代理(副)


代理模式广泛用于AOP远程处理中


org.springframework.aop.framework.ProxyFactoryBean是使用代理的一个很好的例子。


该工厂基于Spring bean创建AOP代理。


代理提供了另一个对象的替代品,以控制对它的访问。


在此处阅读有关代理的更多信息。


辛格尔顿


Singleton模式可确保仅一个对象实例存在于提供服务的内存中。


在Spring中,默认情况下,bean(作用域)的作用域是单例的,并且IoC容器在Spring IoC容器上仅创建对象的一个​​实例。


Spring容器会将这个单个实例存储在单例容器缓存中,并且该容器的所有后续请求和链接都将接收缓存的对象。


建议对无状态bean使用单例范围。


可以将bean的范围定义为singletonprototype (随每个bean请求创建一个新实例)。


xml文件中的示例配置:


 <!--      singleton --> <bean id = "..." class = "..." scope = "singleton/prototype"> <!--    --> </bean> 

您可以在此处阅读有关Singleton的更多信息。


工厂工厂


这种模式允许您通过称为工厂方法的公共静态方法来初始化对象。


Spring使用以下两种方法使用Factory模式创建一个bean对象。


  • 豆工厂


    一个简单的容器,为DI提供了基本支持(依赖注入,依赖注入)。 org.springframework.beans.factory.BeanFactory接口用于与此容器一起使用。


  • ApplicationContext



Spring中提供的另一个容器,用于添加企业特定的功能。 这些功能包括从属性文件中读取参数以及为事件侦听器发布应用程序事件的功能。


org.springframework.context.ApplicationContext接口用于与此容器一起使用。


以下是ApplicationContext的最常用实现。


  • FileSystemXmlApplicationContext在构造函数中,必须使用Bean的配置指定XML文件的完整路径。


  • ClassPathXmlApplicationContext您需要将具有bean配置的XML文件放入CLASSPATH中。


  • XmlWebApplicationContext在Web应用程序中加载带有XmlWebApplicationContext元数据的XML文件。



范例:


 package com.eduonix.springframework.applicationcontext; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext( "C:/work/IOC Containers/springframework.applicationcontext/src/main/resources/bean-factory-config.xml"); HelloApplicationContext obj = (HelloApplicationContext) context.getBean("helloApplicationContext"); obj.getMsg(); } } 

为了更好地理解这一点,让我们看一个真实的例子。 第一种配置:


 <bean id="welcomerBean" class="com.mysite.Welcomer" factory-method="createWelcomer"> <constructor-arg ref="messagesLocator"></constructor-arg> </bean> <bean id="messagesLocator" class="com.mysite.MessageLocator"> <property name="messages" value="messages_file.properties"></property> </bean> 

现在是bean:


 public class Welcomer { private String message; public Welcomer(String message) { this.message = message; } public static Welcomer createWelcomer(MessageLocator messagesLocator) { Calendar cal = Calendar.getInstance(); String msgKey = "welcome.pm"; if (cal.get(Calendar.AM_PM) == Calendar.AM) { msgKey = "welcome.am"; } return new Welcomer(messagesLocator.getMessageByKey(msgKey)); } } 

您可以在此处阅读有关Factory的更多信息。


范本


此模式广泛用于重复的样板代码(例如,闭合连接等)。
例如, JdbcTemplateJmsTemplateJpaTemplate译者注:JpaTemplate自Spring 3.1起已被弃用 )。


您可以在此处阅读有关模板的更多信息。


模型视图控制器


Spring MVC的优点是您的控制器是POJO,而不是Servlet。 这使测试控制器更加容易。 值得注意的是,仅要求控制器返回视图的逻辑名,并且视图的选择留给ViewResolver 。 这有助于将控制器重新用于各种演示选项。


您可以在此处阅读有关Model View Controller的更多信息。


前控制器


Spring提供了一个DispatcherServlet来确保将传入请求发送到您的控制器。


Front Controller模式用于提供集中的请求处理机制,以便所有请求均由单个处理程序处理。 该处理程序可以对请求进行身份验证,授权,注册或跟踪,然后将请求传递给适当的控制器。


您可以在此处阅读有关Front Controller的更多信息。


查看助手


Spring有几个自定义的Velocity JSP标签和宏,以帮助将代码与表示分离。


View Helper将视图(例如JSP)中的静态内容与处理业务逻辑分开。


诸如Spring和Struts之类的框架提供了自己的标记库,以将处理逻辑封装在帮助器中,而不是将逻辑置于诸如JSP文件的视图中。


您可以在此处阅读有关View Helper的更多信息。


依赖项注入和控制反转(IOC)(依赖项注入和控制反转)


Spring的IoC容器负责创建对象,将对象链接在一起,配置对象以及处理从创建到完全销毁的整个生命周期。


Spring容器使用依赖注入(DI)来控制应用程序组件。 这些组件称为Spring Bean。


您可以在此处阅读有关依赖注入的更多信息。


服务定位器


ServiceLocatorFactoryBean存储有关上下文中所有bean的信息。 当客户端代码按名称请求服务(bean)时,它只是在上下文中找到此组件并返回它。 客户代码不需要编写与Spring相关的代码来查找bean。


当我们想使用JNDI查找各种服务时,将使用Service Locator模式。 由于在JNDI中查找服务的成本很高,因此Service Locator使用了缓存。 首次请求服务时,服务定位器在JNDI中搜索该服务并缓存该对象。 通过服务定位器进一步搜索相同的服务将在缓存中执行,这将大大提高应用程序的性能。


您可以在此处阅读有关服务定位器的更多信息。


观察者可观察


ApplicationContext事件引擎中使用。
定义对象之间的一对多关系,以便当一个对象的状态更改时,将自动通知并更新其所有订户。


您可以在此处阅读有关Observer的更多信息。


上下文对象


上下文对象模式将系统数据封装在上下文对象中,以供应用程序的其他部分共享,而无需将应用程序绑定到特定协议。


ApplicationContext是Spring应用程序中提供应用程序配置信息的中央接口。


您可以在此处阅读有关Context Object的更多信息。


参考文献


https://stackoverflow.com/questions/755563/what-design-patterns-are-used-in-spring-framework


这是这种材料。 我们正在等待您的评论,并邀请您参加免费的网络研讨会 ,在该框架下,我们将开发具有UI,身份验证和授权的功能完善的经典Web应用程序。 我们还将研究Web应用程序的功能,并尝试解决Enterprise的一些问题。 网络研讨会将于今天举行。

Source: https://habr.com/ru/post/zh-CN451516/


All Articles