¡Hola, ciudadanos de Habrovsk! El largo fin de semana ha terminado, lo que significa que es hora de compartir una nueva traducción útil. Hoy hablaremos sobre los patrones de diseño utilizados en Spring Framework. Como habrás adivinado, este material está dedicado al inicio de la contratación de un nuevo grupo en el curso "Desarrollador para Spring Framework" , que comienza el 28 de mayo. Empecemos

En este artículo, revisaremos varios patrones de diseño que se usan ampliamente en Spring Framework. Los patrones de diseño describen técnicas de programación en el desarrollo de software orientado a objetos.
Aquí hay algunos patrones conocidos utilizados en Spring Framework:
- Proxy (Diputado)
- Singleton
- La fábrica
- Plantilla
- Controlador de vista de modelo
- Controlador frontal
- Ver ayudante
- Inyección de dependencia e Inversión de control (IoC) (Inyección de dependencia e inversión de control)
- Servicio de localización
- Observador observable
- Objeto de contexto
Proxy (Diputado)
El patrón proxy se usa ampliamente en AOP y remoting .
Un buen ejemplo de uso de Proxy es org.springframework.aop.framework.ProxyFactoryBean .
Esta fábrica crea proxys AOP basados en el bean Spring.
Un proxy proporciona un sustituto de otro objeto para controlar el acceso al mismo.
Lea más sobre Proxy aquí .
Singleton
El patrón Singleton asegura que solo exista una instancia de un objeto en la memoria que proporcionará servicios.
En Spring, el alcance del bean (scope) es singleton de forma predeterminada y el contenedor IoC crea exactamente una instancia del objeto en el contenedor Spring IoC.
El contenedor Spring almacenará esta instancia única en el caché de contenedor único, y todas las solicitudes y enlaces posteriores para este contenedor recibirán el objeto en caché.
Se recomienda utilizar un alcance único para frijoles sin estado.
El alcance del bean se puede definir como singleton
o como prototype
(se crea una nueva instancia con cada solicitud de bean).
Configuración de ejemplo en archivo xml:
<bean id = "..." class = "..." scope = "singleton/prototype"> </bean>
Puedes leer más sobre Singleton aquí .
La fábrica
Este patrón le permite inicializar un objeto a través de un método estático público llamado método de fábrica.
Spring usa el patrón Factory para crear un objeto bean utilizando los siguientes dos enfoques.
Otro contenedor presente en Spring que agrega características específicas de la empresa. Estas características incluyen la capacidad de leer parámetros de archivos de propiedades y publicar eventos de aplicaciones para escuchas de eventos.
La interfaz org.springframework.context.ApplicationContext
se utiliza para trabajar con este contenedor.
Las siguientes son las implementaciones más utilizadas de ApplicationContext
.
FileSystemXmlApplicationContext
: en el constructor debe especificar la ruta completa al archivo XML con la configuración de los beans.
ClassPathXmlApplicationContext
: debe colocar el archivo XML con la configuración del bean en CLASSPATH.
XmlWebApplicationContext
: carga un archivo XML con metadatos XmlWebApplicationContext
en una aplicación web.
Ejemplos:
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(); } }
Para comprender mejor esto, veamos un ejemplo del mundo real. Primera configuración:
<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>
Y ahora el frijol:
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)); } }
Puedes leer más sobre Factory aquí .
Plantilla
Este patrón se usa ampliamente para trabajar con código repetitivo repetitivo (como cerrar conexiones, etc.).
Por ejemplo, JdbcTemplate , JmsTemplate , JpaTemplate ( Nota del traductor: JpaTemplate ha quedado en desuso desde Spring 3.1 ).
Puede leer más sobre la plantilla aquí .
Controlador de vista de modelo
La ventaja de Spring MVC es que sus controladores son POJO, no servlets. Esto facilita la prueba de controladores. Vale la pena señalar que los controladores solo necesitan devolver el nombre lógico de la vista, y la elección de la vista se deja a ViewResolver
. Esto facilita la reutilización de controladores para varias opciones de presentación.
Puede leer más sobre Model View Controller aquí .
Controlador frontal
Spring proporciona un DispatcherServlet para garantizar que se envíe una solicitud entrante a sus controladores.
El patrón del controlador frontal se utiliza para proporcionar un mecanismo centralizado de procesamiento de solicitudes, de modo que todas las solicitudes sean procesadas por un único controlador. Este controlador puede autenticar, autorizar, registrar o rastrear la solicitud y luego pasar la solicitud al controlador apropiado.
Puede leer más sobre el controlador frontal aquí .
Ver ayudante
Spring tiene varias etiquetas y macros JSP Velocity personalizadas para ayudar a separar el código de la presentación.
View Helper separa el contenido estático en una vista, como un JSP, del procesamiento de la lógica empresarial.
Los marcos como Spring y Struts proporcionan sus propias bibliotecas de etiquetas para encapsular la lógica de procesamiento en ayudantes en lugar de colocar la lógica en una vista como archivos JSP.
Puede leer más sobre View Helper aquí .
Inyección de dependencia e inversión de control (IOC) (Inyección de dependencia e inversión de control)
El contenedor de IoC de Spring es responsable de crear el objeto, vincular los objetos, configurarlos y manejar todo su ciclo de vida desde la creación hasta la destrucción completa.
El contenedor Spring utiliza la inyección de dependencia (DI) para controlar los componentes de la aplicación. Estos componentes se llaman frijoles de primavera.
Puede leer más sobre la inyección de dependencia aquí .
Servicio de localización
ServiceLocatorFactoryBean
almacena información sobre todos los beans en un contexto. Cuando el código del cliente solicita un servicio (bean) por nombre, simplemente encuentra este componente en contexto y lo devuelve. El código del cliente no necesita escribir código relacionado con Spring para encontrar el bean.
El patrón Localizador de servicios se usa cuando queremos encontrar varios servicios usando JNDI. Dado el alto costo de encontrar servicios en JNDI, Service Locator utiliza el almacenamiento en caché. Cuando se solicita un servicio por primera vez, el Localizador de servicios lo busca en JNDI y almacena en caché el objeto. La búsqueda adicional del mismo servicio a través del Localizador de servicios se realiza en la memoria caché, lo que mejora significativamente el rendimiento de la aplicación.
Puede leer más sobre el Localizador de servicios aquí .
Observador observable
Usado en el motor de eventos ApplicationContext
.
Define una relación de uno a muchos entre objetos para que cuando cambie el estado de un objeto, todos sus suscriptores sean notificados y actualizados automáticamente.
Puedes leer más sobre Observer aquí .
Objeto de contexto
El patrón de objeto de contexto encapsula los datos del sistema en un objeto de contexto para que otras partes de la aplicación lo compartan sin vincular la aplicación a un protocolo específico.
ApplicationContext es la interfaz central en una aplicación Spring para proporcionar información de configuración de la aplicación.
Puede leer más sobre Context Object aquí .
Referencias
https://stackoverflow.com/questions/755563/what-design-patterns-are-used-in-spring-framework
Aquí hay tal material. Esperamos sus comentarios y estamos invitados a un seminario web gratuito , en cuyo marco desarrollaremos una aplicación web clásica completa con interfaz de usuario, autenticación y autorización. También estudiaremos las características de las aplicaciones web e intentaremos resolver algunos problemas de Enterprise que. El seminario web se llevará a cabo hoy.