Jacob Orshalick (autor de Seam Framework: La experiencia de la Evolución de Java EE) dijo:¿Se eliminarán las inyecciones de costura?
Outjection le permite realizar las variables disponibles en el contexto actual para inyección o acceso a través de EL. Esto puede ser beneficioso si desea acoplar libremente varios componentes que inyectan la misma variable de contexto (como el usuario actual, el hotel que se está reservando, etc.). Si quiere evitar la proyección, una alternativa es usar un método @Factory o establecer el valor directamente en el contexto a través de: Contexts.getConversationContext(). Set ("myVarName", myVar)
Otro beneficio es el rendimiento. Al proyectar un valor al contexto, puede omitir tener que pasar por su componente para obtener ese valor. Esto es especialmente aplicable en el caso de tablas de datos con JSF (ver esta discusión). Pero, como verá en la discusión, también podría usar @BypassInterceptors para lograr el mismo beneficio.
La inyección es realmente una conveniencia, pero los mismos beneficios definitivamente se pueden lograr a través de otros medios. Tenga en cuenta que la inyección no se incluyó en Web Beans y que se eliminará o se eliminará por completo en Seam 3, por lo que esta es una razón más para evitarla cuando sea posible.
Tenemos una aplicación con muchas inyecciones y comenzamos a deshacernos de ellas. Dijo:
pero los mismos beneficios definitivamente se pueden lograr a través de otros medios.
pero ¿cuáles son estos otros medios? ¿Cómo eliminar las inyecciones? En ASP.NET, por ejemplo, tiene variables de sesión. En Seam, puede expulsar var en sesión (un beneficio en algunas situaciones).
O ámbito de página: (por ejemplo, en el ciclo jsf, el bean de respaldo se llama varias veces (a veces). Tiene una cuenta cargada desde un param de página accountId. Puede cargar la cuenta, rechazarla con un alcance de página y puede usar sus propiedades en gran medida. O (para evitar la proyección) es tener un método loadAccount() donde toma la cuenta del DB siempre que lo necesite ... PEOR!)
No creo que:
Contexts.getConversationContext().set("myVarName", myVar)
es un método de cómo evitar la proyección.
Esto solo llama al mismo contexto donde se guarda la variable expuesta y la modifica de manera profunda (creo que es exactamente lo que @Out hace en el fondo).
Pregunta 1: ¿Qué piensas chicos sobre su intención? ¿Tiene información específica sobre cómo lo reemplazarán?
Pregunta 2: ¿Cómo se puede evitar el uso de la inyección?
Gracias de antemano.
hola, ¿me puede decir cómo lograr lo siguiente en la costura 3? Contexts.getConversationContext(). Set ("myVarName", myVar) –