考虑一个门面
public interface LoggingFacade {
void log(String logMessage);
}
使用相应的bean
public class LoggingBean implements LoggingFacade {
@Inject
private LoggingService loggingService;
@Override
public void log(String logMessage) {
loggingService.log(logMessage);
}
}
与
public class LoggingService {
public void log(String logMessage) {
// some logic and logging
}
}
他们都在同一个包里。我希望每个程序员都能调用外观而不是直接调用服务(在其他包中)。所以我尝试将一个受保护的构造函数添加到LoggingService
。
public class LoggingService {
protected LoggingService() {
}
public void log(String logMessage) {
// some logic and logging
}
}
可悲的是,这并不禁止在其他类中使用{注入} LoggingService
。或者换句话说
public class MyClass {
@Inject
private LoggingService loggingService;
public void foo() {
loggingService.log("Hello");
}
}
的工作原理。您是否知道如何禁止使用LoggingService
,以便每个用户都必须拨打LoggingFacade
?
答案 0 :(得分:0)
只要您没有Java 9模块系统,就无法执行此操作。
使用Java 9,您可以定义一个不导出LoggingService的单独模块。