Prefacio
Hay muchas formas de inyectar instancias en primavera, pero debido a la diferente orden de inicialización, el método de inyección basado en la anotación es propenso a no ser inyectado correctamente con éxito.
Este artículo introducirá una forma basada en dinámica para extraer frijoles administrados por primavera en proyectos reales. No diré mucho a continuación, echemos un vistazo a la introducción detallada juntos.
1. Inyectar instancias basadas en el etiquetado
Cuando se inicializa el bean, el objeto del que depende debe inicializarse. Si el objeto inyectado se inicializa más tarde que el objeto actual, el objeto inyectado será nulo.
1.1 @aUtowired
Cargue los frijoles administrados por resorte por tipo. Por defecto, su frijol debe existir. Si su frijol es nulo, su propiedad requerida se puede configurar en falso. Para obtener detalles específicos, consulte el código fuente:
@Target ({elementType.Constructor, elementType.method, elementType.parameter, elementType.field, elementtype.annotation_type})@retención (retenciónpolicy.runtime)@documentedpublic@interface autowired {/*** Declara si la dependencia anotada es necesaria. *El valor predeterminado es {@code true}.*/Boolean requerido () predeterminado verdadero;}Si necesita inyectar un frijol basado en un comando, debe usar @Qualifier para etiquetar el nombre. El ejemplo del código es el siguiente:
@Autwired@QUALIFIER ("BeanName") Private BeanType Beanobj;Alcance de la aplicación: variables anteriores, métodos de setter y constructores.
Fuente: Marco de primavera
1.2 @Inject
Proporcionado por javax.inject.inject, se ensambla automáticamente en función del tipo. Si necesita transferir de acuerdo con el nombre, debe usar @named junto con él. Este uso es muy similar al @Autowired proporcionado por el marco de primavera.
Alcance de la aplicación: variables, métodos setter, constructores
Fuente: Especificación JSR330 Paquete de extensión Javax
Ejemplo de código:
@Inyect@llamado ("BeanName") Private BeanType Bean;1.3 @Resource
El valor predeterminado es la inyección de ensamblaje por nombre. Solo cuando el frijol que coincida el nombre no se puede encontrar la inyección por tipo. Se proporciona después de JDK 1.6.
Alcance de la aplicación: se puede aplicar a variables y métodos setter
Fuente: Proporcionado después de JDK 1.6
Ejemplo de uso del código:
@Resource (name = "myBeanName") Private BeanType Bean;
2. Método de inyección dinámica
Idea: use ApplicationContextAware para obtener la referencia de ApplicationContext, y luego obtenga dinámicamente el objeto basado en ApplicationContext.
El código de implementación es el siguiente:
@ComponentPublic Class SpringContextUtil implementa ApplicationContextAWee {// Spring Aplicación Contexto Contexto Aplicación Static ApplicationContext ApplicationContext;/** Implemente el método de devolución de llamada de la interfaz ApplicationContextAware y establece el entorno de contexto ** @Param ApplicationContext*/public void setApplicationContext (applicationContextContext) ApplicationContext;}/*** @return ApplicationContext*/public static ApplicationContext getApplicationContext () {return ApplicationContext;}/*** Get Object ** @param name*@return object*@throws beanSexception*/public static object getBean (name de cadena) tira beansexception {return application.Después de eso, puede obtener dinámicamente las instancias de frijol requeridas en el código:
BeanType Bean = SpringContextUtil.getBean ("BeanName")¿No es muy fácil de usar?
Resumir
Aquí resumimos las diversas formas de inyectar frijoles en la primavera, cada una con sus ventajas y desventajas, y puede elegir usarlos.
De acuerdo, lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.