Prefacio
En el desarrollo normal de Java, los programadores deben confiar en otras clases en una determinada clase, por lo que generalmente usan new de clase y luego llaman a instancias de clase. El problema con este desarrollo es que new instancias de clase no son fáciles de administrar. Spring propone la idea de inyección de dependencia, es decir, las clases de dependencia no son instanciadas por los programadores, sino que nos ayudan new instancias a través de contenedores de primavera e inyectar instancias en la clase que necesita el objeto. Otro término para la inyección de dependencia es la "inversión de control". El entendimiento común es: por lo general, estamos new una instancia, y el control de esta instancia es nuestro programador, y la inversión de control significa que el trabajo de la new instancia no es realizada por los programadores estadounidenses, sino que se entrega al contenedor de primavera.
Hay cuatro formas de inyectar dependencia en la primavera
1. Establezca la inyección (generalmente también llamada inyección de atributos)
2. Inyección del constructor
3. Inyección de interfaz (esto básicamente no se usa ahora)
4. Inyección de anotación (@Autowire)
A continuación se muestra un ejemplo del uso de inyección del método establecido, inyección del constructor e inyección de anotación.
1. Establecer inyección del método (inyección de atributos)
Userdao.java
Public Class UserDao {public void Insertuser (usuario de usuario) {// lógica específica}}Userservice.java
Interfaz pública UserService {void Insertuser (usuario de usuario);}UserServiceImpl.java
Public Class UserServiceImpl implementa UserService {userdao userDao de usuarios privados; public void setUserDao (userdao userDao) {this.userdao = userDao; } public void Insertuser (usuario de usuario) {userdao.insert (usuario); }}Archivo de configuración de resorte
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-omitir una redacción de configuración no relatada-> <bean id =" userdao "> <///bean" id = "Úselos de los productos" name = "userdao" ref = "userDao"> </bean> </beans>
Lo anterior puede inyectar userdao en ussereServiceImpl
2. Inyección del constructor
User.java
Usuario de clase pública {// Para simplificar, escriba dos atributos Nombre de cadena privada; edad de entero privado; // omitir el método getter/setter sobre el nombre, el usuario público de la edad (nombre de cadena, int age) {this.name = name; this.age = edad; }}Ahora use el archivo de configuración de Spring para inyectar el objeto de usuario
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/spreping-beanspreing-beanspreing-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beans-beans-beansping-beans-beans-beans-beans-beans-beans-beansping-beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!--Omit some unrelated configuration writing --> <bean id="user"> <!--Subscript of constructor parameters starts from 0 (avoid multiple constructors having the same number de parámetros)-> <constructor-arg type = "java.lang.string" index = "0" valor = "zhangsan"/> <constructor-arg type = "java.lang.integer" index = "1" valor = "20> </ beates>
Lo anterior puede inyectar valores de propiedad en el objeto de usuario. Por supuesto, si desea inyectar el ejemplo usando el método establecido, en realidad es el mismo. Es necesario tener un constructor en UserServiceImpl , y los parámetros formales son userdao, por lo que no hay necesidad de setter .
Entonces la redacción del archivo de configuración de Spring debe cambiarse a este
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/spreping-beanspreing-beanspreing-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beans-beans-beansping-beans-beans-beans-beans-beans-beans-beansping-beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <! omite alguna redacción de configuración no relatada-> <bean id =" userdao "> <///bean> <" ind = "usuarios Los parámetros comienzan desde 0 (evite múltiples constructores que tengan el mismo número de parámetros)-> <constructor-arg index = "0" ref = "userdao"> </bean> </beans>
Esto también puede lograr el efecto logrado por la inyección del método establecido anterior
3. Inyección de anotación
Nunca he intentado si se puede @Autowire con éxito sin agregar @Component,@Service,@Controller , etc. a estas clases. Sin embargo, se recomienda agregar anotaciones correspondientes al nivel correspondiente. En el siguiente ejemplo, UserDAO pertenece a la capa de módulo. En primavera, puede usar la anotación @Component .
Userdao.java
@ComponentPublic Class UserDao {public void Insertuser (usuario de usuario) {// lógica específica omitida}}Userservice.java
Interfaz pública UserService {void Insertuser (usuario de usuario);}UserServiceImpl.java
// Introducir el paquete de primavera correspondiente @ServicePublic UserServiceImpl implementa UserService {@AUTOWIRE userdao userDao; public void Insertuser (usuario de usuario) {userdao.insert (usuario); }}El archivo de configuración correspondiente de Spring
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/spreping-beanspreing-beanspreing-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beansping-beans-beans-beansping-beans-beans-beans-beans-beans-beans-beansping-beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-omitir una redacción de configuración no relacionada-> <!-* significa escanear todos los paquetes. En el desarrollo real, puede escanear en función de los paquetes que involucran componentes de anotación-> <context: component-scan base-paquete = "*"> <!-activar componente escaneo-> </context: component-scan> <context: annotation-config> <!-activar procesador de anotaciones-> </context: annotation-config> <ray id = "userdao" </</</</</</beay> id = "UserService"/> </beans>
Sin embargo, durante el proceso de desarrollo, la inyección del método SET está habilitada y la inyección de anotación está habilitada, Spring elegirá primero la inyección establecida, por lo que no olvida proporcionar el método establecido correspondiente, de lo contrario fallará.
A través de la comparación, la inyección de anotación es mucho más conveniente que las otras inyecciones, y se escriben menos código y archivos de configuración. Se recomienda utilizar la inyección de anotación durante el proceso de desarrollo.
Resumir
Lo anterior es una introducción completa a varios métodos de inyección de dependencia en la primavera. Espero que pueda ayudarlo en su estudio o trabajo. Si tiene alguna pregunta, también puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.