2016-10-24 3 views
0

Ich habe an einer Spring-MVC-Projektstruktur gearbeitet, bei der sich mehrere konkrete Serviceklassen von einer abstrakten Klasse erstrecken.
Auto-Verdrahtung Mehrere Implementierungen einer abstrakten Klasse

In meinem Controller versuche ich, die abstrakte Klasse zu autowire und wählen Sie die Implementierung basierend auf der Benutzerauswahl. Hier ist der relevante Teil der Klasse Controller:

@Controller 
@RequestMapping("/") 
public class DashboardController { 
    @Autowired 
    LogAnalyzerAbstract logAnalyzer;//new LogAnalyzer(); 
     private static final Log logger =LogFactory.getLog(DashboardController.class); 
.... 
logAnalyzer.process(); 
} 

ich an den Controller wollen die Implementierung verwenden basierend auf der Benutzereingabe und verwendet, um die abstrakte Klasse LogAnalyzer Referenz im weiteren implementaion.

Ist meine Logik gültig? Kannst du mich führen?

Antwort

0

Wenn ich verstehe, was Sie richtig fragen, müssen Sie mehrere Spring-MVC-Controller erstellen, einen für jeden Anwendungsfall, mit eigenem Basispfad, und dort die abstrakte Serviceklasse (oder den Dienst) Schnittstelle), basierend auf dem Bean-Namen des konkreten Service (wenn Sie die Annotation @Service für konkrete Serviceklassen verwenden, sollte der Bean-Name der Name der konkreten Serviceklasse sein, beginnend mit einem Kleinbuchstaben).

Zum Beispiel so etwas wie die folgenden:

@Service 
public class MyFirstUseCaseService extends AbstractService { 
... 
} 

und in der Steuerung

@Controller 
@RequestMapping("/firstUseCaseBaseUrl") 
MyFirstUseCaseController { 

    @Autowired 
    @Qualifier("myFirstUseCaseService") 
    private AbstractService service; 
.... 
} 
+0

Danke für die Antwort. Das würde zu viele Controller zur Folge haben, die fast die gleiche Aufgabe erfüllen. – Sohil

Verwandte Themen