[JAVA] Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus

Was

――Ich habe Clean Architecture gelesen und wollte sehen, was passiert, wenn ich einige Szenarien mit Spring Boot implementiere.

Karte

Projekt zu erstellen

artifact-id Namensraum Inhalt
my-business com.example.demo.business Entität, Anwendungsfall, Repository-Schnittstelle
my-repository1 com.example.demo.repository Hat den Inhalt des Endlagers(Beispiel: für MySQL)
my-repository2 com.example.demo.repository Hat den Inhalt des Endlagers(Beispiel: Für Dateien)
my-runner com.example.demo.runner Stapelverarbeitung starten main

Abhängigkeiten in pom.xml

modules.png

--my-running verwendet my-repository1. my-repository2 wird nicht verwendet.

Quellbeispiel (mein Geschäft)

SomeEntity.java


package com.example.demo.business;

public class SomeEntity {
	public int id;
	public String name;
}

SomeUseCase.java


package com.example.demo.business;

@Component
public class SomeUseCase {

	@Autowired
	private MyRepositoryInterface repo;

	public void doSomething(String name) {
		SomeEntity entity = new SomeEntity();
		entity.name = name;

		repo.save(entity);
	}
}

MyRepositoryInterface.java


package com.example.demo.business;

public interface MyRepositoryInterface {
	public void save(SomeEntity someEntity);
}

Quellbeispiel (my-repository1)

MyRepositoryImpl1.java


package com.example.demo.repository;

import org.springframework.stereotype.Component;

import com.example.demo.business.MyRepositoryInterface;
import com.example.demo.business.SomeEntity;

@Component
public class MyRepositoryImpl1 implements MyRepositoryInterface {

	public void save(SomeEntity someEntity) {
		System.out.println("save to mysql." + someEntity.name);		
	}

}

Quellbeispiel (my-repository2)

MyRepositoryImpl2.java


package com.example.demo.repository;

import org.springframework.stereotype.Component;

import com.example.demo.business.MyRepositoryInterface;
import com.example.demo.business.SomeEntity;

@Component
public class MyRepositoryImpl2 implements MyRepositoryInterface {

	public void save(SomeEntity someEntity) {
		System.out.println("save to file." + someEntity.name);		
	}

}

Quellbeispiel (mein Läufer)

MyRunnerApplication.java


package com.example.demo.runner;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages={"com.example.demo.runner, com.example.demo.business, com.example.demo.repository"})
public class MyRunnerApplication {

	public static void main(String[] args) {
		SpringApplication.run(MyRunnerApplication.class, args);
	}
}

MyRunner.java


package com.example.demo.runner;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import com.example.demo.business.SomeUseCase;

@Component
public class MyRunner implements CommandLineRunner{
	
	@Autowired
	private SomeUseCase someUseCase;
	
    @Override
    public void run(String... args) throws Exception {
    		System.out.println("running runner...");
    		
    		someUseCase.doSomething(args[0]);
    }

}

Einfallsreichtum, um diese mit Spring Boot zu bewegen

--scanBasePackages listet alle Namespaces auf.

pom.xml


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

Startmethode

--Erstelle ein Glas für jedes Projekt außer für meinen Läufer. `mvn install -DskipTests = true `

init.sh


$ mvn spring-boot:run -Dspring-boot.run.arguments="hello"
...
running runner...
save to mysql.hello

Eindrücke davon zu machen. Verdienstausgabe

Eindrücke davon zu machen. Nachteile

Was ich nicht verstanden habe

--Für scanBasePackages, wenn es mehrere detaillierte Module gibt, die möglicherweise in Zukunft gewechselt werden, sollte ich sie auflisten, wenn ich ohne Kompilieren wechseln möchte?

Zukünftige Entwicklung

--Was ist, wenn Sie den Anwendungsfall und die Entität in separate Gläser trennen möchten? --Wie kann ich die Frühlingsanmerkungen in meinem Anwendungsfall entfernen? ――Was passiert, wenn Sie den Anwendungsfall-Ausgabeport (I), den Anwendungsfall-Eingabeport (I) und den Anwendungsfall-Interaktor einführen, die in Kapitel 22 des Buches aufgeführt sind?

Recommended Posts

Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
Versuchen Sie es mit Spring Boot mit VS-Code
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
Mit Spring Boot herunterladen
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
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
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
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 es mit Spring Boot Security
Versuchen Sie Spring Boot auf dem Mac
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Teil 1: Versuchen Sie, die von Spring Security 5 unterstützte OAuth 2.0-Anmeldung mit Spring Boot zu verwenden
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Versuchen Sie, Spring Boot auf Kubernetes auszuführen
[Frühling] Mehrere Bohnen automatisch verdrahtet. (Mit Bonus)
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
So lesen Sie Request Body mit Spring Boot + Spring Security mehrmals
Verarbeitung beim Starten einer Anwendung mit Spring Boot
[Java] [Spring] Spring Boot Das mysteriöse Hamarineta der Abhängigkeitsinjektion
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
HTTPS mit Spring Boot und Let's Encrypt
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert