Las razones y soluciones para la falla de inyección de @Autowired en SpringBoot
La ruta del paquete de las clases inyectadas a través de @Autowired no se encuentra en la ruta del paquete/subpaquete de la clase de inicio de la aplicación.
La regla predeterminada para el ensamblaje de beans en proyectos Spring Boot es escanear de arriba a abajo según la ubicación del paquete donde se encuentra la clase Aplicación (es decir, la clase de entrada del proyecto).
Por ejemplo, la clase de inicio de la aplicación bajo el paquete com.alibaba.taobao solo escaneará el paquete com.alibaba.taobao y todos sus subpaquetes si la clase que debe cargarse automáticamente no está. en el paquete com.alibaba.taobao, se escanearán el paquete com.alibaba.taobao y todos sus subpaquetes. Si la clase que debe cargarse automáticamente no está en el paquete com.alibaba.taobao, se escaneará el paquete com.alibaba.taobao y todos sus subpaquetes. Si el paquete que requiere la carga automática de clases no está en com.alibaba.taobao y sus subpaquetes, sino en com.alibaba.tmall, entonces no se escaneará y, naturalmente, no se podrá inyectar.
Si la clase A contiene la propiedad del miembro B, y B se inyecta automáticamente a través de @Autowired y se genera una instancia de la clase A a través de new, la inyección automática fallará.
Defina el escaneo de dos paquetes en la clase de inicio, es decir, agregue la clase anotada con @SpringBootApplication:
@ComponentScan({"com.alibaba.taobao", "com .alibaba.tmall"})
o
@ComponentScan({"com.alibaba"})
Definir una clase SpringUtil
Luego, en la clase A, obtenga la instancia de B en el contenedor Spring mediante la siguiente llamada
ClassBInterface b = (ClassBInterfaceImpl) SpringUtil.getBean("classBInterfaceImpl"
);