public abstract class SelfValidating<T> {
private Validator validator;
public SelfValidating() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
protected void validateSelf() {
Set<ConstraintViolation<T>> violations = validator.validate((T) this);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
}
}
Intellij에서 Root Directory에서 새로운 모듈을 만들면된다.
공통 모듈에 대한 이름은 주로 Common, Global 등을 사용하였는데 나에게는 공통에 대한 의미를 더 부여하기 위해 Common을 사용하였다.
위에서 추가해주었다면 Root Directory에 settings.gradle에 common이 포함되었을 것이다.
그 후 common Directory에서 필요한 클래스를 만든다. 나에게 필요한 클래스는 SelfVaildating이므로 만들어주었다.
여기까지 온 상태에서 다른 서비스(유저, 주문 등등)에 바로 SelfVaildating을 아직은 사용할 수 없다.
다른 서비스에서 공통 모듈에 있는 클래스를 임포트하기 위해서는 연결 경로를 설정해주어야한다.
공통 모듈에 클래스를 사용하기 위한 다른 서비스는 모두 밑과 같이 작업을 해주어야한다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.6.1'
}
group = 'user'
version = '0.0.1-SNAPSHOT'
dependencies {
// common module
implementation project(path: ':common')
// 다른 dependencies....
}
implementation project(path: ':common')
이 부분을 추가해주었다.path: ':common'
는 해당 공통 모듈에 대한 Directory 이름으로 지정해주어야한다.build를 다시 한 뒤 SelfValidating을 임포트 하게 되면 위 네모박스와 같이 임포트가 된다.
따라서 다른 공통 모듈로 만든 다른 클래스도 이제 유저 서비스에서는 계속 사용할 수 있다.
그리고 이제 유저 서비스를 컴파일 하게 되면 common에 대한 즉, 공통 모듈에 대한 컴파일이 먼저 진행 하고 난 뒤 유저 서비스에 대한 컴파일이 진행이 된다.