Мы должны поделиться нашей базой кода с партнером для разработки, но мы не хотим раскрывать реализацию некоторых сервисов.Можем ли мы autwire интерфейс без какой-либо реализации весной?
Скажем, у нас есть интерфейс FooService
и его реализация FooServiceImpl
.
public interface FooService
{
void doSomething();
}
@Service
public class FooServiceImpl implements FooService
{
@Override
public String doSomething();
{
...
}
}
Многие другие классы используют эту услугу и звонят doSomething(). Например:
@Service
public class BarServiceImpl implements BarService
{
@Autowired
private FooService fooService;
@Override
public String validate();
{
fooService.doSomething();
...
}
}
Если я просто удалить FooServiceImpl
, конечно, NoSuchBeanException
будет выброшено во время запуска. Если я использую @Autowired(required = false)
везде, где FooService будет автоматически, NullPointerException
будет запущен во время выполнения, когда вызывается doSomething()
.
Помимо удаления каждого тела метода в FooServiceImpl вручную, есть ли другой способ работать с этим?
Любая помощь приветствуется.
Зачем вы хотите это сделать? Вам нужно «FooService» для «BarServiceImpl», чтобы работать, не так ли? –
Вы должны получить им реализацию * в конце концов *. Лучший случай, который вы могли бы написать для реализации заглушки. Можете взглянуть на обработку данных Datasource Spring Boot, чтобы увидеть, как они предоставляют резервную базу данных в памяти, если вы не настроите реальную. – chrylis