【发布时间】:2017-01-06 02:42:23
【问题描述】:
我们必须与合作伙伴共享我们的代码库以进行开发,但我们不想透露某些服务的实现。
假设我们有一个接口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。如果我在自动连接 FooService 的任何地方都使用 @Autowired(required = false),那么每当调用 doSomething() 时,都会在运行时抛出 NullPointerException。
除了手动删除 FooServiceImpl 中的每个方法体之外,还有其他方法可以解决这个问题吗?
感谢任何帮助。
【问题讨论】:
-
您为什么要这样做?你需要一个
FooService才能让BarServiceImpl工作,不是吗? -
您必须最终让他们实现。最好的情况是你可以编写一个存根实现。如果你没有配置一个真实的数据库,可以看看 Spring Boot 的数据源处理,看看它们是如何提供内存后备数据库的。
标签: java spring interface autowired interface-implementation