Primavera: @Component versus @Bean

Resuelto user1396576 asked hace 12 años • 0 respuestas

Entiendo que @Componentla anotación se introdujo Spring 2.5para eliminar la definición del bean XML mediante el escaneo de classpath.

@Beanse introdujo en la primavera 3.0 y se puede usar @Configurationpara deshacerse completamente del archivo XML y usar la configuración de Java en su lugar.

¿ Habría sido posible reutilizar la @Componentanotación en lugar de introducirla @Bean? Tengo entendido que el objetivo final es crear beans en ambos casos.

user1396576 avatar May 15 '12 22:05 user1396576
Aceptado

@Component Preferible para escaneo de componentes y cableado automático.

¿ Cuándo deberías usar @Bean ?

A veces la configuración automática no es una opción. ¿Cuando? Imaginemos que desea conectar componentes de bibliotecas de terceros (no tiene el código fuente, por lo que no puede anotar sus clases con @Component), por lo que la configuración automática no es posible.

La anotación @Bean devuelve un objeto que Spring debe registrar como bean en el contexto de la aplicación. El cuerpo del método contiene la lógica responsable de crear la instancia.

MagGGG avatar Nov 29 '2016 08:11 MagGGG

@Componenty @Beanhacer dos cosas bastante diferentes, y no deben confundirse.

@Component(y @Servicey @Repository) se utilizan para detectar y configurar automáticamente beans mediante el escaneo de classpath. Hay un mapeo implícito uno a uno entre la clase anotada y el bean (es decir, un bean por clase). El control del cableado es bastante limitado con este enfoque, ya que es puramente declarativo.

@Beanse usa para declarar explícitamente un solo bean, en lugar de dejar que Spring lo haga automáticamente como se indicó anteriormente. Desacopla la declaración del bean de la definición de clase y le permite crear y configurar beans exactamente como usted elija.

Para responder tu pregunta...

¿ Habría sido posible reutilizar la @Componentanotación en lugar de introducirla @Bean?

Seguro, probablemente; pero decidieron no hacerlo, ya que los dos son bastante diferentes. La primavera ya es bastante confusa como para enturbiar aún más las aguas.

skaffman avatar May 15 '2012 15:05 skaffman
  1. @Component detecta y configura automáticamente los beans mediante el escaneo de classpath, mientras que @Bean declara explícitamente un solo bean, en lugar de dejar que Spring lo haga automáticamente.
  2. @Component no desacopla la declaración del bean de la definición de clase, mientras que @Bean desacopla la declaración del bean de la definición de clase.
  3. @Component es una anotación a nivel de clase , mientras que @Bean es una anotación a nivel de método y el nombre del método sirve como nombre del bean.
  4. No es necesario usar @Component con la anotación @Configuration, mientras que la anotación @Bean debe usarse dentro de la clase que está anotada con @Configuration .
  5. No podemos crear un bean de una clase usando @Component, si la clase está fuera del contenedor Spring, mientras que podemos crear un bean de una clase usando @Bean incluso si la clase está presente fuera del contenedor Spring .
  6. @Component tiene diferentes especializaciones como @Controller, @Repository y @Service, mientras que @Bean no tiene ninguna especialización .
Saurabh Prakash avatar Jul 09 '2018 05:07 Saurabh Prakash