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.)
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.
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
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
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
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.
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