Pregunta

@Autowired funciona sólo una vez.

Lo que hay que hacer para que sea cablear el grano cada vez que el servlet se recrea?

Mi web-app (contenedor Tomcat6) consta de 2 Servlets. Cada servlet tiene campos privados.

Sus emisores están marcados con @Autowired

En el uso del método init I

WebApplicationContextUtils
...
autowireBean(this);

autowires las propiedades marcados con @Autowired una vez - durante la inicialización de la Servlet

.

Cualquier otra sesión se vea estos valores de los campos, que no será reconectado después de la sesión anterior se destruye.

Lo que hay que hacer para que ellos cada vez que un constructor de servlet se llama reconfiguran?

a) Coloque el autowiring al constructor?

O mejor 2) obtener un marco de aplicación web y extraer un grano de allí?

¿Fue útil?

Solución

Parece que hay cierta confusión acerca de cómo funciona el contenedor. Los servlets son esencialmente únicos, no obtiene un nuevo servlet cada vez que alguien llama al servidor. El almacenamiento de estado en campos privados en un servlet es más o menos un error.

¿Cuál es el alcance y el ciclo de vida de la pieza con estado de su procesamiento de solicitudes? Si es sólo la vida de la solicitud, entonces puede tomar lo que sea en el servlet es con estado y moverlo a otra clase. A continuación, se puede definir un grano de prototipo para esa clase y utilizar getBean al inicio de la solicitud para obtener una nueva. Si quieres empezar a recibir de lujo se podría escribir un filtro que pone un nuevo frijol en un ThreadLocal al comienzo de cada solicitud.

Si sus necesidades estatales para abarcan múltiples peticiones, es necesario empezar a llevar estatal o una llave que apunta al almacenamiento de estado en la sesión web, o mirar en el uso de un marco de conversación.

Otros consejos

Trate de usar alcance como prototipo para que @Scope("prototype") frijol

Usted puede tratar de utilizar @Scope ( "sesión")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top