danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • gitlab
  • AWS
  • SWAGGER
  • S3
  • RDS
  • 도메인 주도 설계
  • Database
  • Saving Plans
  • Bitmask
  • POSTGIS
  • ChatGPT
  • nuribank
  • Kotlin
  • 트랜잭션
  • Security
  • docker
  • mockito
  • Jackson
  • DDD
  • PostgreSQL
  • JPA
  • 자바 최적화
  • Java
  • Thymeleaf
  • Spring
  • 등가속도 운동
  • reactive
  • CICD
  • 마이크로서비스패턴
  • connection

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

java/spring

[Spring] @Value, static 변수에 사용하기

2022. 7. 22. 14:35

spring이 제공하는 @Value은 application.yml 등과 결합하여 변수를 상수처럼 사용할 수 있는 유용한 애노테이션이다.

예를 들어, 다음과 같이 사용할 수 있다.

# applicatio.yml
example:
  name: Han
  age: 26
  

// Example.java
@RestController
@RequestMapping("/example")
public class Example {

    @Value("${example.name}")
    String name;
    @Value("${example.age}")
    String age;

    @GetMapping
    public String example() {
        return "Name: " + name + ", Age: " + age;
    }
}

// localhost:8080/example
Name: Han, Age: 26

 

@Value는 스프링이 제공하는 애노테이션이기 때문에, 스프링이 실행되어야 설정 파일에서 값을 꺼낼 수 있다.

 

그런데, 이런 생각을 해볼 수 있다.
"상수를 클래스 안에서 관리하면 지저분하니까 따로 상수 클래스를 만들자."

예를 들면 다음과 같다.

// ExampleInfo.java
public class ExampleInfo {
    public static String name = "Han";
    public static String age = "26";
}

// Example.java
@RestController
@RequestMapping("/example")
public class Example {

    @GetMapping
    public String example() {
        return "Name: " + ExampleInfo.name + ", Age: " + ExampleInfo.age;
    }
}

이렇게 되면 @Value와 같은 상수를 클래스에서 지저분하게 나열할 필요가 없다.

 

다만, 여기서는 "Han"과 같이 static string을 직접 넣어서 사용했는데, 그 이유는 @Value 애노테이션은 static 변수에 직접 매칭시킬 수 없기 때문이다. 예를 들어, 다음과 같이 설정하면 name 변수에는 "Han"이 아닌 null 값이 들어간다.

@Value("${example.name}")
public static String name; // null 값 들어옴

 

 

따라서, @Value를 static 변수에 매칭시키고 싶다면 다른 방법을 사용해야 한다.
바로 setter를 활용하는 방법이 있다.

@Component
public class ExampleInfo {
    public static String name;
    public static String age;

    @Value("${example.name}")
    public void setName(String name) {
        this.name = name;
    }

    @Value("${example.age}")
    public void setAge(String age) {
        this.age = age;
    }
}

 

이 경우 setter 주입을 통해 자동으로 해당 static 변수에 값이 할당된다. 단, 스프링이 실행될 때만 적용되고, @Component로 상수 클래스를 빈 등록해야 한다.

 


 

이제 static 문자열이나 상수들은 한 클래스에 모아두면서 코드를 더 깔끔하게 하도록 노력해야겠다.

 

저작자표시 비영리 동일조건 (새창열림)

'java > spring' 카테고리의 다른 글

[Spring] AWS S3 접근  (0) 2022.07.25
[Spring] S3 Pre-Signed URL 생성  (0) 2022.07.25
[Spring] Spring Security + Swagger 3.0 적용  (0) 2022.07.22
[Spring] Swagger 3.0 적용  (0) 2022.07.16
[Spring] Spring Security + JWT 토큰을 통한 로그인  (57) 2022.07.16
    'java/spring' 카테고리의 다른 글
    • [Spring] AWS S3 접근
    • [Spring] S3 Pre-Signed URL 생성
    • [Spring] Spring Security + Swagger 3.0 적용
    • [Spring] Swagger 3.0 적용
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바