spring 에서 도구 류 정적 필드 에 값 을 우아 하 게 주입 하 는 방법

1668 단어 spring
도구 클래스 를 썼 습 니 다. 'yml 파일' 에서 정적 구성원 변 수 를 자동 으로 읽 을 수 있 으 려 고 했 지만 @ Value 와 @ Autowired 는 모두 인 스 턴 스 를 위 한 것 입 니 다. 저 는 실례 화 를 금지 한 후에 역할 을 하지 않 습 니 다.
public class JwtTokenUtil {

    public static final String CLAIM_KEY_CREATED = "created";

    private static final Logger LOGGER = LoggerFactory.getLogger(JwtTokenUtil.class);

    //@Value("${xx.xx}")  
    private static String secret;
    private static Long expiration;

    private JwtTokenUtil() {
        //    
    }

}

인터넷 에서 몇 가 지 를 찾 았 고 친구 들 과 토론 도 했 습 니 다. 대략 몇 가지 방식 으로 목적 을 달성 할 수 있 습 니 다.
  • 기본 솔 루 션 은 설정 파일 의 값 을 도구 류 에 기록 합 니 다
  • setter 방법 은 정적 필드 에 값 을 부여 하고 @ Component 를 추가 하여 @ Value 를 유효 하 게 합 니 다
  • @ PostConstructor 주 해 는 로 딩 클래스 에 사용자 정의 논 리 를 삽입 합 니 다
  • Environment 또는 applicationContext 를 도입 하여 읽 을 설정 을 가 져 옵 니 다
  • 첫 번 째 는 분석 하지 않 고 직접
    private static Long expiration = 60*60;

    문 제 는 해결 되 었 으 나 '설정 파일 에서 읽 기' 에 대한 요 구 는 만족 하지 않 습 니 다.
    두 번 째.setter 할당 외 에 다른 방법 도 있 지만 @ Component 를 사용 해 야 하기 때문에 인 스 턴 스 Bean 을 만들어 야 합 니 다.
    세 번 째, 개인 적 으로 더 적절 한 방안 이 라 고 생각 하지만 이런 방식 의 문 제 는...
    이전에 사 용 했 던 정적 주입 방법 은 모두 @ PostConstruct 를 통 해 이 루어 졌 다.
    방법 은 가능 하고 방법 도 좋 지만 문 제 는 sonar 에 게 보고 하 는 것 이다.
    클래스 의 인 스 턴 스 방법 을 호출 하여 정적 상수 에 값 을 부여 하 는 것 은 허용 되 지 않 기 때 문 입 니 다.
        ——from 피 속 의 사나 운 말
    네 번 째 는 춘 타 오 사내 의 오픈 소스 프로젝트 입 니 다. 용기 refresh 전에 environment 를 받 은 다음 에 대응 하 는 방법 으로 값 을 부여 할 수 있 습 니 다.
     
    이런 것들 이 서로 우열 이 있다 고 생각 합 니 다. 저도 어느 것 이 가장 좋 은 답 을 선 호 하 는 지 잘 모 르 겠 습 니 다. 벽돌 을 던 져 옥 을 끌 어 올 리 고 평론 구역 에서 함께 토론 하 는 것 을 환영 합 니 다.

    좋은 웹페이지 즐겨찾기