tag mvc form spring

form - spring mvc tag select



¿Son seguros los hilos de los objetos de primavera? (1)

Estas son dos preguntas no relacionadas:

¿Son seguros los hilos de los frijoles de primavera?

No.

Spring tiene diferentes scopes bean (por ejemplo, Prototype, Singleton, etc.) pero todos estos ámbitos se aplican cuando se crea el bean. Por ejemplo, se creará un bean de ámbito "prototipo" cada vez que este bean se "inyecte", mientras que un bean de alcance "singleton" se creará una vez y se compartirá dentro del contexto de la aplicación. Hay otros ámbitos, pero solo definen un intervalo de tiempo (por ejemplo, un "ámbito") de cuándo se creará una nueva instancia.

Lo anterior tiene poco o nada que ver con la seguridad de subprocesos, ya que si varios subprocesos tienen acceso a un bean (sin importar el alcance), solo dependerá del diseño de ese bean para que sea o no "seguro para subprocesos" .

La razón por la que dije "poco, en todo caso" es porque podría depender del problema que está tratando de resolver. Por ejemplo, si le preocupa que 2 o más solicitudes HTTP puedan crear un problema para el mismo bean, existe un ámbito de "solicitud" que creará una nueva instancia de un bean para cada solicitud HTTP, por lo tanto, puede "pensar" en una bean particular como "seguro" en el contexto de múltiples solicitudes HTTP. Pero aún no es realmente seguro para subprocesos en Spring, ya que si varios subprocesos usan este bean dentro de la misma solicitud HTTP, se remonta a un diseño de bean ( su diseño de una clase de respaldo de bean).

¿Cómo hacer / diseñar un "objeto" seguro para subprocesos?

Hay varias formas, probablemente demasiado largas para enumerarlas aquí, pero aquí hay algunos ejemplos:

  • Diseñe sus beans de forma inmutable : por ejemplo, no tiene instaladores y solo use argumentos de constructor para crear un bean. Hay otras formas, como patrón Builder , etc.

  • Diseñe sus frijoles sin estado : por ejemplo, un frijol que hace algo puede ser solo una función (o varias). Este bean en la mayoría de los casos puede y debe ser sin estado, lo que significa que no tiene ningún estado, solo hace cosas con los argumentos de función que proporciona cada vez (en cada invocación)

  • Diseñe sus frijoles persistent : es un caso especial de "inmutable", pero tiene algunas propiedades muy agradables. Por lo general, se usa en la programación funcional, donde Spring (al menos todavía) no es tan útil como en el mundo imperativo, pero los he usado con proyectos Scala / Spring.

  • Diseñe sus beans con bloqueos [último recurso]: recomendaría esto a menos que esté trabajando en una biblioteca de nivel inferior . La razón es que nosotros (los humanos) no somos buenos pensadores en términos de bloqueos. De la misma manera en que somos criados y educados. Todo sucede en paralelo sin que tengamos que "poner esa lluvia en pausa, déjame conseguir un paraguas". Sin embargo, las computadoras son todas acerca de los bloqueos cuando se habla de "varias cosas al mismo tiempo", por lo tanto, algunos de nosotros (personas excepcionales) estamos haciendo su parte justa e implementando bibliotecas basadas en estos bloqueos. La mayoría de los otros humanos pueden usar estas bibliotecas y no preocuparse por la concurrencia.

¿Son seguros los hilos de los objetos de primavera? Si no, ¿cómo hacer que los hilos sean seguros?