it-swarm.com.de

Die Codearchitektur von Service-Interface- und Service-Impl-Klassen springt

Ich fand heraus, dass es in einem MVC-Muster hauptsächlich 4 Klassen gibt; der Controller, der Service, der Service impl und das Repo. 

Service ist eine Schnittstelle, und Service implementiert implemen Serviceklasse und enthält alle logischen Codes. Die Struktur würde ungefähr so ​​aussehen: -

Service Schnittstellenklasse

Service{

public void someMethod();

}

ServiceImpl Klasse

 ServiceImpl implements Service{
  public void someMethod(){
   //do something

   }    
 }

Wenn wir jedoch auf die Service-Impl-Codes vom Controller zugreifen möchten, rufen wir die Methode der Service-Klasse folgendermaßen auf:

@Autowired 
Service service;

Object obj =  service.someMethod();

Wie führt der Controller Code der Klasse ServiceImpl aus

9
viper

Im Grunde funktioniert Spring so:

Die Serviceimplementierung sollte eine Spring-Bean sein (sie muss entweder eine Annotation @Component oder @Service haben oder sollte in einer Spring-XML-Konfigurationsdatei definiert sein), damit Spring sie finden und im Spring-Anwendungskontext registrieren kann.

Dann verwenden Sie die Abhängigkeitsinjektion über die Annotation @Autowired, um die Implementierung des Dienstes in die Steuerung einzuspeisen. Das bedeutet, dass Spring Ihren Controller betrachtet, die @Autowired-Annotation in der Membervariablen service findet und sie mit einem Bean initialisiert, das er im Anwendungskontext findet. Dies ist die Instanz der zuvor registrierten Service-Implementierungsklasse . Nachdem Spring fertig ist, bezieht sich service auf die Instanz von ServiceImpl.

Informationen zur Funktionsweise der Abhängigkeitseinspritzung mit Spring finden Sie in der Referenzdokumentation zu Spring Framework: Der IoC-Container

6
Jesper

Die Grundidee hinter dieser Art von Architektur unterscheidet sich kaum von der Frühjahrskonvention.

Angenommen, Sie entscheiden sich morgen, Sie möchten keine Einzelanwendung für beide Projekte haben und gehen in eine Bereitstellung für webapp und eine andere für den Dienst . Beispiel UserService WebApp

damit WebApp eine Verbindung zu UserService herstellen kann, muss es HTTP-Anforderungen stellen, um Daten jeglicher Art abzurufen. Anschließend müssen Sie Ihren gesamten WebApp-Code ändern, um ihn mit neuen Änderungen kompatibel zu machen. Anstelle des direkten Aufrufs der Service-Methode rufen Sie beispielsweise httpClient auf. Um diese Nacharbeit zu vermeiden, können Sie Folgendes tun: Mit dem Interface-Service implementieren Sie Ihr eigenes ServiceImpl und stellen alle darin enthaltenen http-Anforderungen. Der Rest bleibt dabei erhalten. 

Ähnliches wird in UserService gemacht, es wird wie zuvor sein eigenes ServiceImpl haben, wird aber als Einzelobjekt in Controller aufgerufen. 

Ihre Antwort: Sie können direkt auf ServiceImpl verweisen, es dient dem Zweck. Der Unterschied besteht nur dann, wenn ServiceImpl nicht Teil des aktuellen Moduls oder einer Abhängigkeit ist, aber das endgültige gebündelte Projekt wird wahrscheinlich durch ein gleichgeordnetes Modul implementiert

1
LNT

Wenn Sie die Annotation @Autowired verwenden, sucht Spring automatisch in seinem Anwendungskontext einen Kandidaten, der in den Controller eingefügt werden soll. Ein gültiger Kandidat sollte eine konkrete Klasse sein, die als Spring-Bean markiert ist, beispielsweise mit Annotation @Service .

1
gWombat

@Controller - Controller ist ein Einstiegspunkt, an dem Sie die von der Benutzeroberfläche kommende Anforderung verbrauchen, eine Reihe von Diensten definieren und einen URI-Pfad für die Requestmapping-Sicherung erstellen, der angibt, welche Anforderung im Backend eingeht und was zurückgegeben werden soll. Dann erstellen Sie eine Reihe von Diensten, in denen Sie eine Reihe von Schnittstellen schreiben, und dann können Sie fortfahren und eine Reihe von Service-Implementierungsdateien erstellen, und dann DAO. Hinweis zu Autowired: Es bringt automatisch die von Ihnen angegebene Instanz in @ Service - Eine bestimmte Klasse ist als Service zu behandeln, der zum Schreiben von DAO-Transaktionen verwendet wird. @ Autowired bringt eine 'Instanz', die Sie benötigen, von irgendwoher, normalerweise versuchen wir, 'Services' zu finden, die Sie möchten aus der automatischen Benachrichtigung, dann können Sie @qualifier hinzufügen, um Verwirrung darüber zu vermeiden, welche bestimmte Instanz aus ähnlichen Beans herausgebracht werden soll.

0
surendrapanday