[SPRING] ApplicationContext 객체로부터 속성 값을 얻으려면 어떻게해야합니까? (주석을 사용하지 않음)
SPRINGApplicationContext 객체로부터 속성 값을 얻으려면 어떻게해야합니까? (주석을 사용하지 않음)
만약 내가 가지고 있다면:
@Autowired private ApplicationContext ctx;
getBean 메소드 중 하나를 사용하여 bean 및 자원을 확보 할 수 있습니다. 그러나, 나는 속성 값을 얻는 방법을 알아낼 수 없다.
분명히 다음과 같은 @Value 속성을 가진 새 bean을 생성 할 수 있습니다 :
private @Value("${someProp}") String somePropValue;
어떤 메소드를 ApplicationContext 객체에서 호출하여 bean을 autowiring하지 않고 그 값을 얻으려고합니까?
보통 @Value를 사용하지만, SPeL 표현식이 동적이어야하는 상황이 있으므로 주석을 사용할 수 없습니다.
해결법
-
==============================
1.SPeL 표현식이 동적이어야하는 경우에는 속성 값을 수동으로 가져옵니다.
SPeL 표현식이 동적이어야하는 경우에는 속성 값을 수동으로 가져옵니다.
somePropValue = ctx.getEnvironment().getProperty("someProp");
-
==============================
2.$ {someProp} 속성이 PropertyPlaceHolderConfigurer에서 온다고 가정하면 그 일이 어려워집니다. PropertyPlaceholderConfigurer는 BeanFactoryPostProcessor이며 컨테이너 시작시에만 사용할 수 있습니다. 따라서 런타임시 등록 정보를 Bean에서 사용할 수 없습니다.
$ {someProp} 속성이 PropertyPlaceHolderConfigurer에서 온다고 가정하면 그 일이 어려워집니다. PropertyPlaceholderConfigurer는 BeanFactoryPostProcessor이며 컨테이너 시작시에만 사용할 수 있습니다. 따라서 런타임시 등록 정보를 Bean에서 사용할 수 없습니다.
솔루션은 필요한 속성 / 속성으로 초기화하는 일종의 값 홀더 빈을 만드는 것입니다.
@Component public class PropertyHolder{ @Value("${props.foo}") private String foo; @Value("${props.bar}") private String bar; // + getter methods }
이제이 PropertyHolder를 속성이 필요한 곳에 삽입하고 getter 메서드를 통해 속성에 액세스하십시오.
-
==============================
3.Spring pre 3.1에서 멈춘다면,
Spring pre 3.1에서 멈춘다면,
somePropValue = ctx.getBeanFactory().resolveEmbeddedValue("${someProp}");
from https://stackoverflow.com/questions/10822951/how-do-i-get-a-property-value-from-an-applicationcontext-object-not-using-an-a by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Hibernate의 EntityNotFoundException Many to One 매핑 그러나 데이터가 존재 함 (0) | 2019.02.04 |
---|---|
[SPRING] Gradle - 메인 클래스를 찾지 못했습니다. (0) | 2019.02.04 |
[SPRING] 요청 된 bean은 현재 작성 중입니다. 해결할 수없는 순환 참조가 있습니까? (0) | 2019.02.04 |
[SPRING] @Valid 주석은 Spring에서 무엇을 나타 냅니까? (0) | 2019.02.04 |
[SPRING] 스프링 보안 3.2.1 WebSecurityConfigurerAdapter가 다른 여러 로그인 폼 (0) | 2019.02.04 |