Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo gestiona Spring las cosas Cómo gestiona Spring las cosas

Cómo gestiona Spring las cosas Cómo gestiona Spring las cosas

Spring Framework es un proyecto de código abierto que apareció en febrero de 2003. El proyecto de código abierto se originó a partir del código básico del libro "Expert One-on-One J2EE Design and Development" publicado por Rod Johnson a finales de 2002. En este libro, Rod Johnson defiende la idea de diseño del pragmatismo J2EE, y Spring Framework es una implementación más completa y específica de esta idea. Spring Framework consta de un contenedor, un marco para configurar y organizar componentes y un conjunto de servicios proporcionados por transacciones integradas, persistencia y una interfaz de usuario web. Como marco J2EE liviano, Spring proporciona una forma eficiente de crear y organizar aplicaciones J2EE.

Características de Spring

IoC (Inversión de Control; Inversión de Control); también conocida como DI (Inyección de Dependencia; Inyección de Dependencia) es una idea de programación emergente en la orientación a objetos); campo; también es el núcleo de Spring La esencia de. En pocas palabras, IoC significa que la relación entre programas está controlada por el contenedor, en lugar de ser manipulada directamente por el código de implementación del programa tradicional. Este es el concepto llamado "inversión de control": la transferencia de control del código de la aplicación a un contenedor externo, también conocida como inversión de control, IoC traslada la responsabilidad de la creación del control al marco y se aleja del código de la aplicación; . Cuando se utiliza el contenedor IoC de Spring, simplemente señala los objetos que requiere su componente, y el contenedor IoC de Spring los proporciona en tiempo de ejecución en función de los datos de configuración XML.

Spring IoC, con la ayuda del patrón de diseño de inyección de dependencia, permite a los desarrolladores ignorar el ciclo de vida de los objetos mismos y sus relaciones, y mejora el uso de este patrón por parte de los desarrolladores. Administrar un solo objeto no es difícil; administrar un grupo de objetos es difícil. La inyección de dependencia permite que los contenedores administren objetos, es decir, "no me llames, yo te llamo". De esta forma, para los desarrolladores, el ciclo de vida del objeto en sí y la relación entre objetos ya no son un problema.

Spring AOP Con la ayuda de los interceptores implementados por Spring, los desarrolladores pueden utilizar servicios empresariales de manera confiable, como servicios de seguridad, servicios de transacciones, etc. AOP es un complemento lógico de la programación orientada a objetos y, con Spring AOP, los desarrolladores pueden utilizar los servicios J2EE de manera eficiente.

La abstracción del servicio Spring, con la ayuda de varias abstracciones de la API J2EE, permite a los desarrolladores usar la tecnología J2EE de manera consistente, sin importar qué API J2EE se use, con la ayuda de la abstracción del servicio Spring, el código se puede reducir considerablemente. , satisfaciendo el principio de diseño de software "menos código, menos errores". Con la ayuda de la abstracción del servicio Spring, el código se puede reducir considerablemente, cumpliendo así el principio de diseño de software de "menos código, menos errores".

La abstracción de Spring IoC + Spring AOP + Spring Service juntos forman un organismo como Spring, lo que hace posible construir J2EE liviano.

Gestión de transacciones de Spring

La gestión de transacciones de Spring se puede dividir en dos categorías: programática y declarativa. La programación es más flexible, pero la cantidad de código es grande y hay más códigos duplicados; la declarativa es más flexible y conveniente que la programática.

1. Gestión de transacciones tradicional usando JDBC

En el pasado, cuando se usaba JDBC para operaciones de datos, DataSource se usaba para obtener la conexión de la fuente de datos. Sabemos que la fuente de datos es. thread-safe. y la conexión no es segura para subprocesos, por lo que cada solicitud debe recuperar una conexión del origen de datos. Las fuentes de datos generales se gestionan mediante contenedores, incluidos los grupos de conexiones. Por ejemplo, TOMCAT, WEBSPHERE, WEBLOGIC y otros contenedores J2EE comerciales proporcionan esta funcionalidad.

En el pasado, cuando usábamos JDBC para escribir código, la gestión de transacciones podía verse así:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Conexión conn = null;

try{

conn = DBConnectionFactory.getConnection;

conn.setAutoCommit(false);

/ / hacer algo

conn.commit(); //cometir transcación

}catch(Exception e)

finalmente catch(SQLException se){ //hacer algo. Pueden ocurrir excepciones al cerrar rs, pstmt y conn

}

Al escribir código de acuerdo con la idea anterior, el código será más largo y es fácil de usar. Si es descuidado y olvida algunos intentos / capturas, arroja algunas excepciones no detectables, aunque a veces escribimos clases DBTool para cerrar estos recursos y asegurarnos de que no se generen excepciones al cerrar, pero esto traerá problemas adicionales.

2. La gestión de transacciones de Spring proporciona programación

Spring proporciona múltiples clases de procesamiento de transacciones:

TransactionDefinition //Definición de atributos de transacción

TranscationStatus / /Representa la transacción actualmente confirmable

La esencia de Spring + Hibernate:

Es la fuente de datos Fuente de datos utilizada por Hibernate, la instancia SessionFactory de Hibernate y el administrador de transacciones HibernateTransactionManager Todos se entregan a Gestión de primavera.

Entonces, ¿cómo implementó Hibernate la gestión de transacciones antes de la integración?

Administre las transacciones de la base de datos a través de ServletFilter, lo que evita tener que ejecutar transacciones de la base de datos cada vez durante las operaciones de la base de datos.

1. 4 características de las transacciones:

Atomicidad: Todas las operaciones en la base de datos en una transacción son una secuencia indivisible de operaciones, o se ejecutan todas o no se ejecuta ninguna.

Consistencia: Los datos no serán dañados debido a la ejecución de las transacciones.

Aislamiento: La ejecución de una transacción no se ve interferida por otras transacciones (procesos). Dos transacciones ejecutadas al mismo tiempo no interfieren entre sí.

Persistencia: Una vez que se confirma una transacción, sus cambios en la base de datos son permanentes.

II.Implementación de transacciones:

Hay dos implementaciones***: método de codificación; método de gestión de transacciones declarativa.

La gestión de transacciones declarativas se implementa en base a la tecnología AOP. Su esencia es interceptar antes y después de que se ejecute el método, luego crear y unir la transacción antes de que se inicie el método de destino, y confirmar o revertir de acuerdo con el. situación de ejecución después de que se ejecuta el método de destino.

Existen dos métodos de gestión de transacciones declarativas: uno basado en archivos de configuración XML; el otro consiste en agregar la anotación @Transactional a los métodos comerciales para aplicar reglas de transacción a la lógica empresarial.

III. Momento de creación de la transacción:

La necesidad de crear una transacción está controlada por el comportamiento de propagación de la transacción. La lectura de datos no requiere o solo requiere que se le asigne una transacción de solo lectura, mientras que la inserción, modificación y eliminación de datos requieren gestión de transacciones.

Configuraciones comunes de gestión de transacciones: la combinación del interceptor de transacciones TransactionInterceptor y el proxy automático de transacciones BeanNameAutoProxyCreator

class="org.springframework.orm.Hibernate3.HibernateTransactionManager">

PROPAGATION_REQUIRED,readOnly< / p>

!

PROPAGATION_REQUIRED,solo lectura

PROPAGATION_REQUIRED,solo lectura<

PROPAGATION_REQUIRED,solo lectura

PROPAGATION_REQUIRED.solo lectura

PROPAGATION_REQUIRED

< /props>

erty>

adminService <

columnsService</value>

newsService

crawlService

memberLevelService

memberService

merService

cartService

<.value>ordersService

trafficService

true