禁止注射考慮一個門面通過訪問修飾符
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
}
}
他們所有的謊言。我希望每個程序員都可以調用Facade,而不是直接調用服務(在其他包中)。所以我試圖給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
?
你不能只是讓日誌服務不公開嗎? –
你建議使用哪種修飾語? – Chris311
你想讓'LoggingService'成爲一個CDI bean嗎? (如果是的話爲什麼?)如果不是,你可以使類包私有(也可能是'@ Vetoed')。理由:你想禁止其他人使用它,那麼爲什麼要把它暴露在第一位呢?事實上,即使在與門面相同的包裝中,我也認爲這是門面的實施細節。 –