복붙노트

[SPRING] 런타임시 @Value로 주석 된 업데이트 필드

SPRING

런타임시 @Value로 주석 된 업데이트 필드

우리가 봄에 그런 요소를 가지고 있다고 상상해 봅시다.

@Component
public class MyComponent {

    @Value("${someProperty}")
    private String text;
}

속성 자리 표시자를 정의하면 다음과 같습니다.

<context:property-placeholder location="classpath:myProps.properties"/>  

myPropos.properties에는 someProperty의 값이 들어 있습니다.이 값은 컨텍스트가 초기화 될 때 텍스트 필드에 주입됩니다. 그건 아주 간단하고 쉽습니다.

하지만 someProperty의 값을 변경할 수있는 서비스가 있다고 가정 해 보겠습니다.

public void changeProp(String name, String newValue);

newValue를 텍스트 필드에 다시 삽입 할 수 있습니까? 나는 그것이 아주 곧장 앞으로해야한다는 것을 의미합니다. 기본적으로 그것은 초기화 후 분사와 다른 점이 없습니다. 나는 봄이 이것을지지하지 않는다고 상상할 수 없는가? 어떤 일이나 다른 일을 할 수 있을까요?

기본적으로이 작업을 수행 할 수는 있지만 이미 이미 뭔가있는 것일까 요? 그렇지 않다면 스프링 클래스가 사실 처음에 주사를 처리하는 것을 아는 사람이 있습니까? 솔루션 자체가 존재하지 않는다면 코드를 재사용 할 수 있습니다.

해결법

  1. ==============================

    1.콩을 만드는 동안 정상적인 주입이 이루어지기 때문에 스프링은 이것을 지원하지 않을 것이라고 기대하지만, 사용하지는 않을 것이다.

    콩을 만드는 동안 정상적인 주입이 이루어지기 때문에 스프링은 이것을 지원하지 않을 것이라고 기대하지만, 사용하지는 않을 것이다.

    어쨌든 :이 블로그 항목 "Spring 3.1, Java 7 및 Google Guava로 다시로드 할 수있는 응용 프로그램 등록 정보"에서 해결책에 대한 아이디어를 찾을 수 있습니다.

    주요 아이디어는 사후 처리기를 사용하여 속성 필드가있는 모든 필드의 목록을 작성하는 것입니다. 속성이 켜져 있으면이 목록을 사용하여 필드를 업데이트 할 수 있습니다.

  2. from https://stackoverflow.com/questions/16478679/update-field-annotated-with-value-in-runtime by cc-by-sa and MIT license