Al escribir la implementación de la interfaz, a veces hay múltiples clases de implementación. Este artículo presenta la especificación de una clase de implementación específica al pasar en una cadena al llamar.
1. Clases de interfaz e implementación:
// Interface Public Interface ServiceInterface {public void Method ();} // Dos clases de implementación específicas @Service ("AService") clase pública AServiceImpl implementa ServiceInterface {@Override public void Method () {System.out.println ("The Impl es"); } @Override public string toString () {return "a"; }} @Service ("bservice") public class BServiceImpl implementa ServiceInterface {@Override public void Method () {System.out.println ("El implato es B"); } @Override public string toString () {return "b"; }}El método toString () se reescribe en la clase de implementación y puede personalizar la cadena. Cuando pasa la cadena especificada cuando se le llama, puede obtener el frijol correspondiente.
2. Registre la escritura:
@Service ("Registro") El registro de clase pública implementa InitializingBean, ApplicationContextAware {private Map <String, ServiceInterface> ServiceImplMap = new HashMap <> (); application privateContext ApplicationContext; // Obtener el contexto de Spring @Override public void setApplicationContext (ApplicationContext ApplicationContext) lanza Beansexception {this.ApplicationContext = ApplicationContext; } // Obtenga todos los frijoles de la clase de implementación de la interfaz y póngalos en el mapa de acuerdo con las reglas que ha establecido, @Override public void AfterPropertIesset () lanza la excepción {MAP <String, ServiceInterface> BeanMap = ApplicationContext.GetBeansOfType (ServiceInterface.Class); // El siguiente código es poner el bean en el mapa de acuerdo con las reglas que ha establecido, y mi regla aquí es clave: Service.ToString (); Valor: Bean // Al llamar, la cadena específica del parámetro pasada a Service.ToString () puede obtener el bean correspondiente // tampoco puede hacer las siguientes operaciones aquí, solo use BeanMap directamente. Al llamar, se pasa el nombre del bean (ServiceInterface) para (ServiceInterface ServiceImpl: BeanMap.Values ()) {ServiceImplMap.put (ServiceImpl.ToString (), ServiceImpl); }} Public ServiceInterface getServiceImpl (name de cadena) {return ServiceImplMap.get (nombre); }} 3. Clase de prueba:
@ResourceRegister Register; @TestPublic void testService () {ServiceInterface Service = Register.GetServiceImpl ("A"); servicio.method (); ServiceInterface Service2 = Register.GetServiceImpl ("B"); servicio2.method ();}Los resultados de la operación se muestran en la figura:
Observación:
Después de la carga de la primavera, obtenga el método para aplicar el texto:
Implementación de la interfaz de la interfaz de ApplicationContextAware, se puede obtener el ApplicationContext de Spring durante el proceso de carga de frijoles. Esto es particularmente importante. ApplicationContext es el contexto de la aplicación Spring. Se puede obtener una gran cantidad de contenido e información del contenedor de primavera, incluida cualquier frijol de la aplicación.
@Component ("InformerRegistry") Public Final Class InformeRregistry implementa la ApplicationContextAware {private ApplicationContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext ApplicationContext) lanza Beansexception {this.ApplicationContext = ApplicationContext; }} Para la interfaz de extensión de frijoles comúnmente utilizada de Spring, consulte: http://www.cnblogs.com/xrq730/p/5721366.html
Aviso:
La primavera se inicia cuando usa el siguiente método para obtener el contexto de primavera. Si escribe el siguiente método varias veces, se iniciarán múltiples contenedores Spring para copiar el código de la siguiente manera: ApplicationContext CTX = new ClassPathXMLAplaPlicationContext ("Classpath: Meta-Inf/Spring/*. Xml");
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.