La primavera inyecta frijoles de 7 maneras, ¿quién no?
Hablando de Spring, todos definitivamente mencionarán el contenedor IOC y la inyección de dependencia DI. Spring inyecta clases en el contenedor IOC marcando cada clase como un método de bean para lograr el efecto de inversión de control. Por lo tanto, cuando comenzamos a usar beans, debemos usar archivos xml para inyectarlos uno por uno, como el siguiente.
Nuestros proyectos son generalmente muy grandes, por lo que necesitamos usar miles de Beans, por lo que es muy problemático escribirlos. En este momento, Spring nos ayudó a implementar un método de inyección mediante anotaciones. Simplemente agregue las anotaciones correspondientes delante de las clases que deben inyectarse, y Spring nos ayudará a escanearlas para inyectarlas.
paquete de escaneo xml
En términos generales, la inyección de Bean tiene la forma más directa y fácil de entender de lograr la inyección. No digamos tonterías a continuación y peguemos el código primero.
Además, las preguntas y respuestas de las entrevistas de la serie Spring están organizadas. Puede buscar el subprograma del banco de preguntas de entrevistas de Java en WeChat para responder preguntas en línea.
Clase Bean
Clase de configuración
Clase de prueba
Es ligeramente diferente de xml. En Prueba, lo que se crea una instancia ya no lo es. ClassPathXmlApplicationContext, sino una instancia de AnnotationConfigApplicationContext.
El MyBean en el código anterior es el bean que necesitamos que Spring administre. Es solo una clase simple. En MyConfiguration, primero marcamos la clase con la anotación @Configuration, que indica que la clase es una clase de configuración Spring y se cargará cuando se cargue la configuración.
En MyConfiguration, podemos ver que hay un método que devuelve una instancia de MyBean, y el método está marcado con la anotación @Bean, lo que indica que este es un método que inyecta el bean en el IOC. .
Te recomendamos tutoriales y ejemplos prácticos de Spring Boot:/javastacks/spring-boot-best-practice
Cuando generamos una instancia de Bean, podemos usar el constructor del Bean para inyectar el Implementación de frijoles. Por favor vea el código directamente
Clase Bean
Otra clase Bean
Clase de configuración
Aquí podemos ver que el código es el mismo que Por lo general, el código cuando se inyecta es diferente. Aquí podemos ver que el código inyectado es diferente del método convencional. Echemos un vistazo al significado de la nueva anotación:
@AutoWired
Simple y tosco, el directo. La traducción es ensamblaje automático: llave inglesa:, todavía no entiendo por qué se llama ensamblaje automático: llave inglesa:. Lo sabrás después de leer la siguiente explicación de la anotación. Si desea especificar una identificación de Bean al inyectar, debe usar la anotación @Qualifier.
@Component (patrón singleton predeterminado)
¿Qué significa esto? La forma en que Spring gestiona los beans es la forma en que repara los coches. Si anotamos la parte @Conmonent cuando necesitamos convertir una clase en un bean que Spring pueda inyectar en ella, entonces podemos ensamblarla en el carro IOC como si fuera una llave: al cargar el carro IOC
Hay Hay varias otras anotaciones que logran esto, a saber, la @Component detallada.
Componente:
@ComponentScan("")
O traducción, para el escaneo de componentes, veamos qué "componentes" (clases) deben escanearse en el "repositorio de componentes" en paréntesis).
Si es necesario cargar una "parte" (clase), Spring escaneará el paquete e inyectará todas las clases marcadas con @Component.
El método de inyección del constructor aquí es fácil de entender. Cuando estábamos ensamblando la parte MyBean, de repente descubrimos que debe estar basado en AnotherBean para instalarlo en el COI. ensamblando MyBean Inyecte automáticamente un AnotherBean :wrench: en él.
Tomemos el automóvil como ejemplo. Antes de pisar el acelerador y partir, ¿es necesario enviar el automóvil a AutoWired? El contenido aquí es como enviar el automóvil. el auto, será inútil incluso si pisas el acelerador. Él no se irá.
Podemos inyectar la implementación del bean en el método set del atributo, consulte el código
Clase MyBean
Clase de configuración y clase de prueba
Lo mismo, no lo publiques<
Aquí, encontramos que tenemos un @AutoWired en el método de establecimiento y, a diferencia de lo anterior, no lo conectamos automáticamente cuando se crea una instancia de la clase. llave: Objeto: llave: objeto, pero cuando el definidor se llama explícitamente.
Nuestros dos primeros métodos de inyección, como tiempos diferentes y más código, si queremos pasar propiedades, es decir
Aquí podemos ver que necesitamos usar el objeto de instancia AnotherBean, podemos conectarlo automáticamente a través de @AutoWired.
Clase MyBeanList
Clase MyConfiguration
Aquí inyectamos MyBeanList, y los elementos de la lista se inyectan uno por uno.
Clase MyConfiguration
Inyectar un genérico del mismo tipo que List coincidirá automáticamente con el tipo. Aunque aquí no hay sentido de Lista, solo el tipo String, se inyectará. el frijol de lista.
De manera similar, hay dos formas de inyectar beans de tipo Mapa, y el segundo método tiene mayor prioridad que el primer método.
Las anteriores son varias formas de inyectar beans a través de anotaciones Método, Se puede comparar con la inyección xml.