FrameWorks/Spring & Boot

[Spring Annotation] @Primary, @Required

ABCD 2025. 1. 12.

@Primary

Spring에서 @Primary를 붙여 자동연결시 우선순위를 부여해줄 수 있습니다.
만약 PrefixGenerator 인터페이스 구현체인 DataPrefixGenerator 클래스에 @Primary를 붙여놓았으면 PrefixGenerator 형의 인스턴스가 다수 존재하더라도 @Primary를 붙인 Class의 Bean이 우선적으로 연결됩니다.

@Componet
@Primary
public class DataPrefixGenerator implements PrefixGenerator {

    ...
}

@Required

@Required는 Spring에 내장된 RequiredAnnotationBeanPostProcessor가 지원하는 Annotation입니다.
RequiredAnnotationBeanPostProcessor 후처리기는 @Required를 붙인 모든 Bean Property가 설정되었는지 확인합니다.
하지만, 해당 proeprty값의 설정 여부만 체크할 뿐 그 값이 null인지 아니면 다른 값인지는 신경쓰지 않습니다. 정말 확인 용도로만 사용하는 것이죠.

 

아래 코드로 예시를 들어보겠습니다.


prefixGenerator와 suffix는 시퀀스 생성기의 필수 property입니다. 따라서 해당 property의 생성여부를 판단하기 위해 setter 메서드에 @Required를 붙입니다.

Spring이 해당 property를 감지해서 값의 존재 여부를 조사하고 property값이 없으면 BeanInitializationException예외를 던지게 될것입니다.

public class SequenceGenerator {

    private PrefixGenerator prefixGenerator;
    private String suffix;

    @Required
    public void setPrefixGenerator(PrefixGenerator prefixGenerator) {
        this.prefixGenerator = prefixGenerator;
    }

    @Required
    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }

    ...
}
728x90
반응형

댓글

💲 추천 글