Wir müssen unsere Code-Basis mit einem Partner für die Entwicklung teilen, aber wir wollen die Implementierung einiger Dienste nicht offenbaren.Können wir im Frühjahr eine Schnittstelle ohne jegliche Implementierung autowire?
Angenommen, wir haben eine Schnittstelle FooService
und ihre Implementierung FooServiceImpl
.
Viele andere Klassen autowire diesen Dienst in und rufen doSomething(). Zum Beispiel:
@Service
public class BarServiceImpl implements BarService
{
@Autowired
private FooService fooService;
@Override
public String validate();
{
fooService.doSomething();
...
}
}
Wenn ich löschen Sie einfach FooServiceImpl
, natürlich ein NoSuchBeanException
wird beim Start geworfen werden. Wenn ich @Autowired(required = false)
überall dort verwende, wo FooService autowired ist, wird ein NullPointerException
zur Laufzeit immer dann ausgelöst, wenn doSomething()
aufgerufen wird.
Abgesehen von der Entfernung jeder Methode Körper in FooServiceImpl manuell, gibt es eine andere Möglichkeit, um dies zu arbeiten?
Jede Hilfe wird geschätzt.
warum möchten Sie das tun? Sie brauchen einen 'FooService' für' BarServiceImpl' um zu funktionieren, oder? –
Sie müssen ihnen die Implementierung * irgendwann * bringen. Im besten Fall könnten Sie eine Stub-Implementierung schreiben. Werfen Sie einen Blick auf die Datenquellenbehandlung von Spring Boot, um zu sehen, wie sie eine In-Memory-Fallback-Datenbank bereitstellen, wenn Sie keine echte Datenbank konfigurieren. – chrylis