2014-04-20 1 views
3

아래 두 가지 방법으로 속성 파일을로드하는 방법의 차이점을 알아야합니다. 애플리케이션 콘텍스트가로드 될 때차이점 컨텍스트 : 속성 - 자리 표시 자 VS @Configuration @PropertySource 클래스 경로 속성

는 접근법 1

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

접근 -2-

<context:component-scan base-package="com.snippets.enterprise"/> 

package com.snippets.enterprise; 

@Configuration 
@PropertySource("classpath:/constants.properties") 
public class SpringConfig {} 

I 보는 방법 키와 값을 사용할 수있다. 애플리케이션 컨텍스트가 로딩 될 때 하지만

방식의 속성 중 하나 키는 사용할 수 없습니다 그것은

키가 발견되지 않는 말한다. 이 두 가지 접근 방식의 차이점을 알려주십시오.

  1. 속성 파일이 응용 프로그램 컨텍스트와 함께로드되는 경우.

  2. 키를 입력하면 속성 파일의 값이 컨테이너에서 초기화됩니다.

+0

추가 예외 :

당신이 독점적으로 다음 방법 2를 사용하고자하는 반면에 경우, 가장 좋은 방법은,이 방법으로 재산을 찾아 명시 ​​적 속성을 필요로하는 환경에 주입하는 것입니다 스택 트레이스를 통해 질문에 접근 할 수 있습니다. ** Approach-1 ** 파일을 구성 했습니까? 프로젝트에있는 스프링 구성 파일은 무엇입니까? – Rembo

답변

4

둘 다 실제로 실제로 독립적입니다. 내 이해에 따라 시도해보고 명확하게 해보자 : 을 사용하는 접근법 1은 ${propertyname}의 자리 표시자를 bean 정의에서 해결할 수있는 구성 요소를 등록합니다.

반면에 @PropertySource 주석은 활성 Spring environment에 속성을 제공합니다.

이제 접근 방식 1로 돌아 가면 context:property-placeholder은 사실 location 속성을 통해 등록 된 속성뿐만 아니라 현재 활성화 된 환경에서 사용할 수있는 속성을 살펴볼 필요가 있음을 알기에 실제로 지능적입니다. 접근 방식 2와 같은 @PropertySource 주석을 통해 속성이 추가되었습니다.

따라서 자리 표시자를 계속 해결하려면 접근 방식 2와 함께 접근 방식 1을 사용해야합니다.

@Component 
public class MyBean { 
    @Autowired 
    private Environment environment; 

    public void mymethod() { 
     .. 
     environment.getProperty("mykey"); 
    } 
} 
+0

감사. 그러나 Approach-1에 속성 키를 삽입 할 수 없습니다. 접근법 -2가 그것을 만드는 곳. \t \t \t <속성 이름 ="키 "값 ="$ {키 패스} "컨텍스트를로드 할 때 /> \t 키 패스 속성 파일의 속성이며 주입하고 싶다. 스레드 – Kasun

+0

예외"주 " org.springframework.beans.factory.BeanDefinitionStoreException : 이름이 'helloWorldBean'인 bean 정의가 클래스 경로 resource [applicationContext.xml]에 정의되어 있습니다 : 'keypath'자리 표시자를 해결할 수 없습니다. \t at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer .processProperties (PropertyPlaceholderConfigurer.java:252) \t at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory (PropertyResourceConfigurer.java:75) – Kasun

+0

하지만이 방법은 접근 방식 2와 잘 작동합니다. < Kasun

관련 문제