2011-04-03 17 views
5

Estoy desarrollando una aplicación JAVA EE 6. Estoy usando CDI extensivamente, Mi pregunta es, ¿son @Inject y @Produces lo mismo que @In y @Out for Seam? ¿Las anotaciones @In y @Out todavía se usan ahora que tenemos CDI?Seam bijection and Weld

Respuesta

11

¿Las anotaciones @In y @Out siguen siendo usadas ahora que tenemos CDI?

@In y @Out son Seam 2 anotaciones, por lo que no se utilizan en Java EE 6.

Mi pregunta es, son @Inject y @Produces lo mismo que @In y @out de ¿costura?

@Inject y @Produces son no exactamente lo mismo pero que son más o menos equivalentes. La principal diferencia es que las dependencias de Java EE 6 se producen cuando requirió (controlado por el componente que requiere la dependencia), mientras que en Seam 2 se realizó tan pronto como algo fue listo para ser utilizado en otro lugar (controlado por componente que proporciona la dependencia)

Tome un inicio de sesión como ejemplo:

  • en Seam 2, el usuario autenticado se outjected en el alcance deseado (como sesión) inmediatamente después de haber iniciado sesión con éxito en el componente de entrada en sí. tenía un alcance que por lo general se ajusta al caso de uso (conversación), pero no el alcance de la dependencia proporcionada (sesión).
  • en Java EE 6, un componente de inicio de sesión del ámbito realiza la autenticación y almacena el usuario autenticado en un campo privado. Este campo es controlado por un método productor. Así que cada vez que otro componente pide al usuario autenticado, algo como esto se lleva a cabo:

    @Produces @LoggedIn User getCurrentUser() { 
         return user; 
        } 
    

¿Por qué? Te escucho preguntando ...

La razón es bastante simple. Weld/Java EE 6 obtiene un gran aumento de rendimiento al ser capaz de proxy (la mayoría de las dependencias). Y simplemente no es posible realizar proyecciones de proxy :-)

Bueno, aparte de eso: el enfoque orientado a la demanda de Java EE 6 (lo solicita cuando lo necesita) se siente superior a Seam 2 (lo produce y lo almacena) .

+0

Ene, gracias por su respuesta tan útil. Mencionas @In y @Out son anotaciones de Seam 2, ¿están obsoletas en la costura 3? – arg20

+0

Más que eso, no están disponibles. Son parte del jar Seam 2, y esta biblioteca no está implementada en JEE 6, por lo que no puede usarlas en absoluto. –

+1

Seam2! = Seam3 Solo los nombres son iguales. Seam3 es una nueva implementación completa. –