with resource injection example bean and java spring resources autowired required

java - resource - spring injection



@Autowired vs @Required on setter (2)

Tengo curiosidad por saber cuál es la diferencia entre un código como este:

class MyClass { @Autowired MyService myService; }

y código como este:

class MyClass { MyService myService; @Required public void setMyService(MyService val) { this.myService = val; } }


@Autowired anotación @Autowired se utiliza cuando se desea activar automáticamente un bean. @Autowired no se limita al configurador. Se puede utilizar con un constructor y un campo también. Si usa la anotación @Autowired en un campo, ese campo se conectará automáticamente con el bean que tenga el tipo de datos coincidente.

@Required verificación si una propiedad en particular se ha establecido o no. Si un campo se ha anotado con la anotación @Required y ese campo no está establecido, obtendrá org.springframework.beans.factory.BeanInitializationException .

Referir:

Primavera @ Uso automático

Uso recomendado de la anotación @Required de Spring

Edición: como lo señala ''kryger'': el campo anotado con @Autowired también es @Required (a menos que explícitamente establezca su parámetro requerido en falso). p.ej:

@Autowired(required=false) private ObjectType objectType;

Para un campo que ha sido anotado @Autowired , si el bean con el tipo de datos coincidente no está disponible, se lanza org.springframework.beans.factory.BeanCreationException .


@Autowired no es lo mismo que @Required .

La @Required -Rnotation está especializada para decirle a Spring que esta propiedad debe ser inyectada por la información que figura en el archivo de configuración XML y no a través de anotaciones. Y eso no importa cuando usas @Autowire -Annotation.

El @Autowire -Annotation (como en su ejemplo de código), le dice a ApplicationContext (también conocido como Spring-IoC-Containter) que inyecte la dependencia deseada. (No importa cómo, si es mediante el uso de anotaciones o el archivo XML de ApplicationContext).

El @Required -Annotation , le dice a ApplicationContext que esta propiedad debe mencionarse en el archivo XML (El archivo XML del ApplicationContext), pero la Anotación por sí sola no le indica que inyecte la dependencia. Por lo tanto, se utiliza para verificar si está en el archivo de configuración XML, pero no para inyectar una dependencia. La inyección se realiza porque la propiedad se menciona en el archivo XML.

Entonces, al final, indica que la inyección se debe realizar debido a una configuración en el archivo XML. Pero nuevamente: la anotación no indica que la dependencia se debe inyectar, sino que se debe mencionar en el archivo XML, que permite la inyección de la dependencia.

Al mencionar la propiedad en un archivo XML me refiero a una configuración de este tipo, por ejemplo:

<bean id="MyClass" class="com.myclasses.common.MyClass"> <property name="someProperty" value="ValueThatHasToBeInjected" /> </bean>

Entonces, ¿por qué debería usarlo sobre @ Anotación automática?

Debe usarlo cuando la dependencia en el archivo de configuración XML debe inyectar la dependencia.

¿Puedes darme un ejemplo?

Bueno, ya hay un muy buen ejemplo en este sitio web. donde esto también se explica.