Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo inyectar múltiples implementaciones de un servicio?

¿Cómo inyectar múltiples implementaciones de un servicio?

En este caso, la inyección de alias es la única forma. Puede utilizar la anotación @Resource o @Qualifier. @Resource se inyecta por Nombre de forma predeterminada. Si no puede coincidir por nombre, lo hará por tipo.

Por ejemplo, la interfaz IAnimal tiene dos clases de implementación, DaoImpl y CatImpl.

@Service("dogImpl ")

La clase pública DaoImpl implementa IAnimal{

...

}

@Service(" catImpl ")

Clase pública ca implementaciones impl animal {

...

}

Pública class AnimalController {

@Resource(name="dogImpl") //Implementa el nombre marcado en la anotación @Service en la clase 1.

La anotación privada IAnimal dogImpl

...

} o

@Qualifier también es una forma de byName, pero Diferente de @Resource. @Qualifier usa el nombre de la clase.

Clase pública AnimalController {

@Qualifier("DaoImpl") //El nombre de la clase de implementación clase 1. Tenga en cuenta que se distingue de Resource(name="dogImpl "). La clase inyectada es la clase de implementación escrita, no la interfaz. Al hacer clic, aparece el nombre del método. Puedes elegir cuál no entra en conflicto. Para comprender el acoplamiento, es mejor que una interfaz corresponda a una clase de implementación. Puedes escribir dos

¡Esa es tu pregunta para primavera! De forma predeterminada, @Autowired busca beans coincidentes en el contenedor mediante la coincidencia de tipos. Cuando solo hay un bean coincidente, Spring lo inyecta en la variable marcada con @Autowired. Si hay varios beans coincidentes en el contenedor, el nombre del bean se puede calificar mediante la anotación @Qualifier. Por ejemplo: @service servicio de inicio de sesión de clase pública { @auto wired @qualifier(" userdao ")private userdao userdao //Aquí} Supongamos que hay dos beans de tipo userDao en el contenedor, uno llamado UserDao y el otro llamado otherUserDao.