Frühling 4 – Generics-Typ als Qualifikator beim Injizieren von Bohnen

Generics ist eine der beliebtesten und leistungsstärksten Funktionen für die Java-Programmierung. Das Spring-Framework unterstützt die Generics-Typen für die Beans vollständig und versucht immer, alle Java-Programmierfunktionen wie Generics, Annotations usw. zu nutzen. Leider bestand ein Problem bei früheren Versionen von Spring darin, dass man Generics nicht als Qualifikatorform verwenden konnte. Wenn Sie @Autowired für generische Beans in Spring 3.2 versuchen, erhalten Sie die Ausnahme Es ist keine qualifizierende Bean des Typs (Beanname) definiert: einzelne passende Bean erwartet, aber 2 gefunden: benaName1,beanName2„.

Eine der in Spring 4 eingeführten Verbesserungen sind die generischen Typen als eine Art Qualifizierer beim Injizieren von Beans. Wir verfügen über verschiedene Arten von Methoden, um die am besten passenden Typen für die @Autowired-Annotation zu ermitteln. Mit der Spring 4-Version können Sie die Bohnen mithilfe der Eingrenzung generischer Typen injizieren.

Lesen Sie auch:

  • Frühling 4-Tutorials
  • Spring 4-Funktionen

In der Spring-Dokumentation heißt es:

Wenn Sie beispielsweise ein Spring Data Repository verwenden, können Sie jetzt ganz einfach eine bestimmte Implementierung einfügen: @Autowired Repository customerRepository.

Um diese Funktion zu demonstrieren, habe ich in diesem Tutorial ein einfaches Beispiel geschrieben. Wir haben zwei Klassen, Manager und Admin, beide sind Mitarbeiterklassen. Diese beiden Objekte werden zur Laufzeit mithilfe des generischen Typs injiziert. Schauen wir uns das Beispiel an:

Employee.java

package javabeat.net.beans;

public abstract class Employee<T> {
	public void printCompanyName(){
		System.out.println("Display : Company Name");
	}
	public abstract void empSection();
}

Manager.java

package javabeat.net.beans;

public class Manager extends Employee<Manager>{
	public void empSection(){
		System.out.println("Display : Manager Section");
	}
}

Admin.java

package javabeat.net.beans;

public class Admin extends Employee<Admin>{
	public void empSection(){
		System.out.println("Display : Admin Section");
	}
}

SpringMVCConfiguration.java

package javabeat.net.controller;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javabeat.net.beans.Admin;
import javabeat.net.beans.Employee;
import javabeat.net.beans.InjectBeans;
import javabeat.net.beans.Manager;

@Configuration
public class SpringMVCConfiguration {
	@Bean
    public Employee<Manager> getManager() {
        return new Manager();
    }

    @Bean
    public Employee<Admin> getAdmin() {
        return new Admin();
    }

    @Bean(name="InjectBeans")
    public InjectBeans getInject() {
        return new InjectBeans();
    }

}

InjectBeans.java

package javabeat.net.beans;

import org.springframework.beans.factory.annotation.Autowired;

public class InjectBeans {
	@Autowired Employee<Manager> emp1;
	@Autowired Employee<Admin> emp2;
	public void invokeManager(){
		emp1.empSection();
	}
	public void invokeAdmin(){
		emp2.empSection();
	}
}

SpringMVCApplicationDemo.java

package javabeat.net.controller;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import javabeat.net.beans.InjectBeans;

/**
 * @Autowired with Generic Types example
 *
 * @author Krishna
 *
 */
public class SpringMVCApplicationDemo {
	public static void main(String() args) {
		ApplicationContext context = new AnnotationConfigApplicationContext(SpringMVCConfiguration.class);
		InjectBeans injectBeans = (InjectBeans) context.getBean("InjectBeans");
		injectBeans.invokeAdmin();
		injectBeans.invokeManager();
	}
}

Ausgabe

Display : Admin Section
Display : Manager Section

Das obige Beispiel hilft Ihnen zu verstehen, wie generische Typen als Qualifikationsform verwendet werden. Wenn Sie Fragen haben, schreiben Sie diese bitte in den Kommentarbereich.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen