Bei der Entwicklung von Java-Anwendungen kommt es sehr häufig vor, dass Abhängigkeitsinjektionen derselben Bean an verschiedenen Orten und häufig in Beziehungen zwischen Beans erfolgen, wie in den folgenden Beispielen:
@Service @RequiredArgsConstructor public class PersonUpdater { private final PersonValidator validator; private final DocumentService documentService; //outras utilizações no fluxo de atualização public Person toUpdate(final Person person) { validator.validate(person); //...fluxo de atualização de pessoa return person; } }
@Component @RequiredArgsConstructor public class PersonValidator { private final DocumentService documentService; public void validate(final Person person) { if (person.isAdult() && person.isMale()) { final var documents = documentService.getMilitaryDocuments(person.getId()); //validações necessárias } } }
Die Bean DocumentService wurde sowohl in PersonUpdater als auch in PersonValidator injiziert. In PersonUpdater kann die Bean für andere Update-Flows verwendet werden, in PersonValidator ist die Bean jedoch NUR Wird zur Suche nach Militärdokumenten verwendet WENN es sich um die Aktualisierung einer volljährigen männlichen Person handelt. Eine Möglichkeit, das gleiche Ergebnis zu erzielen, sind die folgenden Beispiele:
@Service @RequiredArgsConstructor public class PersonUpdater { private final PersonValidator validator; private final DocumentService documentService; //outras utilizações no fluxo de atualização public Person toUpdate(final Person person) { validator.validate(person, () -> documentService.getMilitaryDocuments(person.getId())); //...fluxo de atualização de pessoa return person; } }
@Component @RequiredArgsConstructor public class PersonValidator { public void validate(final Person person, final Supplier<List<Document>> documentsSupplier) { if (person.isAdult() && person.isMale()) { final var documents = documentsSupplier.get(); //validações necessárias } } }
Mit Functional Interfaces eröffnen sich vielfältige Möglichkeiten, die Verhaltensweisen einer Java-Anwendung zu nutzen! Sie machen die Verwendung über Methodenargumente (wie im Beispiel) und über Attribute einer Klasse flexibler.
Zusätzlich dazu, dass die Abhängigkeitsinjektion nur an einem Ort erfolgt, haben wir Folgendes:
Das obige ist der detaillierte Inhalt vonDica Java: Funktionsschnittstelle #. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!