통해 분사 금지하는 동일 패키지에액세스 개질제
public class LoggingService {
public void log(String logMessage) {
// some logic and logging
}
}
그들은 모든 거짓 콩
public class LoggingBean implements LoggingFacade {
@Inject
private LoggingService loggingService;
@Override
public void log(String logMessage) {
loggingService.log(logMessage);
}
}
상응하는 외관
public interface LoggingFacade {
void log(String logMessage);
}
을 고려한다. 나는 모든 프로그래머가 정면을 호출하고 (다른 패키지에서) 서비스를 직접 호출하지 않기를 바란다. 그래서 보호 된 생성자를 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 빈으로하고 싶습니까? (만약 그렇다면 왜?) 그렇지 않다면 클래스를 private로 설정하고 (아마'@ 거부 됨 '도 가능). 이론적 설명 : 다른 사람들이 사용하지 못하도록하고 싶습니다. 왜 처음에 그것을 드러내는가? 외관과 같은 패키지에 있다는 사실은 그것이 외관의 구현 세부 사항이라고 생각하게 만듭니다. –