[JAVA] Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot

Einführung

Dies ist ein Artikel aus Ihr Meister Adventskalender 2019, Tag 13. (Es wird ein Artikel sein, der das ausgibt, was Sie gelernt haben, seit Sie Mitglied der Gesellschaft geworden sind.)

Hintergrund dieser Zeit

Nachdem ich Mitglied der Gesellschaft geworden war, lernte ich das Konzept der DI (Injektion von Abhängigkeit). Es gab viele Fälle, in denen ich das Framework bei der Entwicklung von WEB-Diensten verwendet habe, aber ich erinnere mich, dass das Konzept von DI nicht in dem von mir hauptsächlich verwendeten "Cake PHP" enthalten war. (Es tut mir leid, wenn ich ein falsches Gedächtnis habe.)

DI verwendet eine vorregistrierte Instanz, indem ein sogenannter DI-Container oder Service-Container (in Spring Boot DI-Container und in Laravel DI-Container genannt) verwendet wird, anstatt eine Instanz mit new zu erstellen und zu verwenden. Machen.

Dieses Mal möchte ich einen Artikel über das Thema der Verwendung von DI-Containern in Spring Boot, das ich für Unternehmen verwende, und der Verwendung von Service-Containern in Laravel schreiben, die ich kürzlich selbst gelernt habe.

Für Spring Boot

Konstruktorinjektion verwenden

Ich werde mit dem Code schreiben, den ich am 7. Tag Ihres Meister-Adventskalenders 2019 in dem Artikel geschrieben habe. Versuchen Sie, die Datenbank mit Spring Boot dynamisch zu wechseln https://github.com/Masaki-Ogawa/datasourceDemo

  1. PersonRepository.java

PersonRepository.java


package com.example.dataSourceDemo.domain.repositories;

import com.example.dataSourceDemo.domain.models.Person;
import org.springframework.data.jpa.repository.JpaRepository;

@Repository
public interface PersonRepository extends JpaRepository<Person, Integer> {

}

Repository-Klasse, die JpaRepository erbt

  1. PersonServiceImpl.java

PersonServiceImpl.java


package com.example.dataSourceDemo.domain.services;

import com.example.dataSourceDemo.annotations.DataSource;
import com.example.dataSourceDemo.annotations.DataSource.DataSourceType;
import com.example.dataSourceDemo.domain.models.Person;
import com.example.dataSourceDemo.domain.repositories.PersonRepository;
import java.util.List;
import org.springframework.stereotype.Service;

@Service
public class PersonServiceImpl implements PersonService {

  private final PersonRepository personRepository;

  public PersonServiceImpl(
      PersonRepository personRepository) {
    this.personRepository = personRepository;
  }

  /**
   *Methode zum Abrufen des Datensatzes der Personentabelle aus der DB von stg
   * @Eintrag in der Rückgabetabelle
   */
  @Override
  public List<Person> findAllPersonInStg() {
    return personRepository.findAll();
  }

  /**
   *Methode zum Abrufen des Datensatzes der Personentabelle aus der DB von stg
   * @Eintrag in der Rückgabetabelle
   */
  @DataSource(value = DataSourceType.PROD)
  @Override
  public List<Person> findAllPersonInProd() {
    return personRepository.findAll();
  }
}

Ich mache DI hier.

Speziell,


private final PersonRepository personRepository;

  public PersonServiceImpl(
      PersonRepository personRepository) {
    this.personRepository = personRepository;
  }

DI durch Konstruktorinjektion wird in dem Teil von durchgeführt. Es wird im DI-Container mithilfe der Anmerkungen "@ Service" und "@ Repository" registriert. Um es zu verwenden, erstellen Sie eine Instanz mit Konstruktorinjektion usw. wie oben beschrieben.

Referenz Spring Framework Summary-About DI

DI bei Laravel

Verwenden Sie einen Dienstanbieter

Erstellen Sie einen Dienstanbieter, um den erstellten Dienst als Dienstcontainer zu registrieren. Dieses Mal habe ich eine Serviceklasse namens DemoService erstellt.

AppServiceProvider.php


class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('App\Services\DemoService');
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

Registrieren Sie den Service wie oben.

DemoService.php


class DemoService {
    public function show() {
        echo "Etwas zeigen";
    }
}

Die Serviceklasse ist diesmal geeignet, aber nur die Methode, die einige Zeichen ausgibt, ist implementiert.

DemoController.php


class MessageController extends Controller
{
    protected $demoService;

    public function __construct(DemoService $demoService)
    {
        $this->demoService = $demoService;
    }

    public function index(Request $request) {

        return $this->demoService->show();
    }
}

Auf diese Weise verwenden wir auch die Konstruktorinjektion, um DI durchzuführen.

Am Ende

Persönlich bin ich der Meinung, dass Spring Boot, das mit Anmerkungen wie "@ Service" und "@ Controller" im DI-Container registriert werden kann, einfacher zu verwenden ist. Schließlich gibt es bei Verwendung von Java und Spring Boot viele Situationen, in denen die Leistungsfähigkeit von Anmerkungen bemerkt wird.

Wie ich am 7. Tag im Adventskalender schrieb, hat jedes Framework seine Vor- und Nachteile, und die Erfahrung, viele Frameworks zu berühren, ist, dass ich, wenn ich in Zukunft etwas mache, "Was soll ich übernehmen?" Wenn ja, ist es das Beste für das Produkt? "

Ich möchte auch in Zukunft sowohl geschäftliche als auch nicht geschäftliche Aspekte ansprechen.

Recommended Posts

Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Versuchen Sie es mit Spring Boot mit VS-Code
Versuchen Sie es mit Spring Boot Security
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Teil 1: Versuchen Sie, die von Spring Security 5 unterstützte OAuth 2.0-Anmeldung mit Spring Boot zu verwenden
HTTPS mit Spring Boot und Let's Encrypt
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Stellen Sie sich die Spring Boot-App mit dem Jib-Maven-Plugin vor und starten Sie sie mit Docker
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Versuchen Sie, einen anderen Servlet-Container-Steg mit Docker zu verwenden
Versuchen Sie DI mit Micronaut
Erster Frühlingsstiefel (DI)
Mit Spring Boot herunterladen
Versuchen Sie es mit Spring JDBC
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
[Hinweis] Festlegen der Datei bei Verwendung von Logback mit Spring Boot
Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
Testen Sie die Klasse mit Feldinjektion im Spring-Boot-Test, ohne den Spring-Container zu verwenden
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Versuchen Sie, mit Keycloak mit Spring Security SAML (Spring 5) zu arbeiten.
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
Versuchen Sie Spring Boot von 0 bis 100.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Versuchen Sie es mit GloVe mit Deeplearning4j
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Einführung in Spring Boot ~ ~ DI ~
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Verwenden von Mapper mit Java (Spring)
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Versuchen Sie Spring Boot auf dem Mac
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen