Entrada rápida: descripción general de los conceptos centrales del marco Spring
En resumen, Spring es un marco de desarrollo de código abierto para Java a nivel empresarial. La funcionalidad principal de Spring Framework se puede utilizar para desarrollar cualquier aplicación Java. Los módulos principales del marco Spring son los siguientes:
Cualquier clase Java ordinaria inicializada por el contenedor Spring IoC se llama Spring Bean. Usamos el contexto de la aplicación Spring para obtener la instancia de Spring Bean. Spring IoC Container gestiona el alcance/ciclo de vida del alcance de Spring Bean e inyecta las dependencias necesarias en el bean.
Diferentes alcances de Spring beans:
Para cualquier aplicación Java, existen dos alcances diferentes, llamados singleton y prototipo (Prototype)
p>
Existen principalmente tres ámbitos (o ámbitos) diferentes, a saber, solicitud, sesión y sesión global, específicamente para aplicaciones web Java basadas en Spring.
Singleton es el ámbito predeterminado para cualquier bean. Esto significa que se creará una única instancia de bean por contenedor de IoC. Por lo tanto, los beans singleton no son seguros para subprocesos.
Para establecer el alcance de un Spring Bean, podemos usar el atributo de alcance en la etiqueta. @scope para DI basada en anotaciones.
El contenedor Spring es el núcleo del marco Spring. Los contenedores crearán objetos, los conectarán, los configurarán y gestionarán su ciclo de vida completo desde la creación hasta la destrucción. El contenedor Spring utiliza inyección de dependencia (DI) para administrar los componentes que componen una aplicación.
Hay dos tipos diferentes de contenedores:
Contenedor BeanFactory: Este es el núcleo del contenedor Spring. org.springframework.beans.factory.BeanFactory es una interfaz que actúa como un contenedor de IoC que crea instancias, configura y administra muchos beans. Los ejemplos de aplicaciones son los siguientes:
Contenedor ApplicationContext: org.springframework.context.La interfaz ApplicationContext también actúa como un contenedor IoC, pero la interfaz ApplicationContext está construida sobre la interfaz BeanFactory. para proporcionar algunas características adicionales de BeanFactory, como integración simple con Spring's AOP, manejo de recursos de mensajes (para I18N), propagación de eventos, contexto específico de la capa de aplicación para aplicaciones web (como WebApplicationContext). Entonces usar ApplicationContext es mejor que usar BeanFactory. El código de muestra es el siguiente:
Para la inyección de dependencia basada en anotaciones, utilice la anotación @Autowired.
Las clases marcadas como @Component/@Service/@Repository, etc. se pueden inyectar en propiedades marcadas como @Autowired
@Autowired se aplica a:
1 ) Basado sobre la diferencia entre constructor y setter
2) La diferencia entre context:annotation-config y context:component-scan
3) @Component, @ Diferencias entre las anotaciones Controller, @Repository y @Service
Si una clase está marcada con la anotación @Component/@Controller/@Service/@Repository, entonces el contenedor Spring DI puede identificar la clase durante el escaneo del componente. mecanismo. Sin embargo, es una buena idea usar @Service para las clases de capa de servicio y @Controller debe usarse en el controlador web Spring MVC. @Repository se utiliza para importar DAO al contenedor DI. Además, cualquier excepción no marcada se convertirá en Spring DataAccessException.
4) ViewResolver y MultipartResolver
ViewResolver se utiliza para resolver vistas por nombre. Esta interfaz está implementada por InternalResourceViewResolver;
MultipartResolver se utiliza para manejar la carga de archivos en aplicaciones web.
5) Validación en Spring MVC
La interfaz org.springframework.validation.Validator admite la validación de Spring MVC. Algunos métodos útiles para validar formularios son rechazarIfEmptyOrWhitespace() y rechazarIfEmpty() de la clase ValidationUtils. Un ejemplo es el siguiente:
Otra forma de validar formularios en Spring MVC es:
La interfaz HandlerInterceptor actúa como un interceptor Spring MVC. Intercepta antes y después de atender la solicitud. Si implementa la interfaz HandlerInterceptor, preHandle(), postHandle() y afterCompletion() son los métodos a anular. Sin embargo, para evitar la sobrescritura, puede utilizar la clase HandlerInterceptorAdapter.
Implementa las interfaces ServletContextAware y ServletConfigAware y anula los siguientes métodos:
Una transacción de base de datos es un conjunto de operaciones que se consideran una unidad de trabajo asociada. El principio fundamental de las transacciones es confirmar todas las operaciones o revertir todas las operaciones en caso de falla. Al confirmar datos en una transacción, debemos garantizar el protocolo/propiedad de transacción llamado ACID (Atomicidad-Consistencia-Aislamiento-Durabilidad):
Transacción global versus transacción local:
p>
Lecturas sucias, lecturas fantasma y lecturas no repetibles:
Aislamiento y propagación:
En versiones anteriores de Spring e Hibernate, la integración requiere HibernateDAOSupport e HibernateTemplate. Sin embargo, las versiones más nuevas de Spring no recomiendan el uso de estas dos clases (solo para entenderlas aquí).
Por lo general, ampliamos nuestra clase DAO desde HibernateDAOSupport y el método getHibernateTemplate() estará disponible para operaciones CRUD en la sesión de Hibernate. Dado que este no es un enfoque recomendado, inyectamos la fábrica de sesiones (SessionFactory) en el DAO. El siguiente fragmento de código le dará algunas ideas sobre HibernateDAOSupport e HibernateTemplate:
DAO es un patrón de diseño para minimizar el acoplamiento entre la aplicación y el backend
ORM maneja cómo se asignan los objetos; en una base de datos relacional de objetos, reduciendo así el acoplamiento entre la base de datos y la aplicación.
Si utiliza un ORM sin DAO, su aplicación se vuelve dependiente de ORM, lo que dificulta el paso de un ORM (por ejemplo, Hibernate) a otro (por ejemplo, NoSQL).
Spring DAO se implementa utilizando la anotación @Repository. El repositorio Spring amplía JPARepository y pasa entidades JPA y sus claves principales.
Finalmente, esta es una breve introducción a los conceptos relacionados con el marco de Spring. Espero que esto pueda brindarle un punto de entrada simple para ingresar y profundizar en la pila de tecnología de Spring sin asustarse por el ecosistema de tecnología de Spring. (La primavera es ahora toda la familia de tecnología de desarrollo de software la tiene y lo tiene todo): ¡da más pasos cada día que pasa, persevera y eventualmente tendrás éxito!