복붙노트

[SPRING] 런타임시 Bean에 동적 특성 적용

SPRING

런타임시 Bean에 동적 특성 적용

높이 및 너비에 대한 속성이있는 Bean DialogBox가 있다고 가정합니다.

public class DialogBox {
 int x;
 int y;
 ...
}

내 applicationContext.xml에서는 합리적인 기본값으로 속성을 정의합니다.

<bean id="dialogbox" class="DialogBox">
  <property name="x" value="100"/>
  <property name="y" value="100"/>
</bean>

dialogBox 빈을 사용하는 클라이언트가 여러 개 있으며 각 클라이언트는 x 및 y에 대한 사용자 정의 값을 원합니다. 우리가 논의한 한 가지 경로는 각 클라이언트에 대해 하나씩 여러 속성 파일을 가지고 있으며 클라이언트 ID를 적절한 파일에 매핑합니다. 예를 들어 클라이언트 123은 dialogbox_123.properties에 매핑됩니다.

dialogbox_123.properties:
x=200
y=400

그런 다음 런타임에 Bean이 요청 될 때 Spring은 클라이언트에 대한 사용자 정의 특성 파일이 있는지 알아보고 해당 특성을 사용합니다. 그렇지 않으면 기본값을 사용합니다. PropertyOverrideConfigurer에 대해 알고 있지만 AFAIK는 컨텍스트가 시작될 때만 작동하므로 우리 용도로는 작동하지 않습니다. 이를 달성하기 위해 봄에 기존 시설이 있습니까? 아니면 누군가 다른 방법으로 추천 할 수 있습니까?

해결법

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

    1.나는 이것이 당신의 경우에 맞을 지 모르겠다. 또 다른 제안은 다음과 같습니다.

    나는 이것이 당신의 경우에 맞을 지 모르겠다. 또 다른 제안은 다음과 같습니다.

    다양한 "클라이언트"의 @PostConstruct 메서드에서 이미 삽입 된 대화 상자 창에서 원하는대로 속성을 설정합니다. 처럼:

    public class MyDialogClient {
        @Autowired
        private Dialog dialog;
    
        @PostConstruct
        public void init() {
            dialog.setWidth(150); //or read from properties file
            dialog.setHeight(200);
        }
        ...
    }
    

    이 경우에도 scope 속성으로 재생할 수 있습니다.

  2. ==============================

    2.Spring OSGi Compendium 서비스를 살펴보면 "managed-properties"라는 속성 관리자가 있습니다.이 속성 관리자를 사용하면 런타임에 속성을 업데이트 할 수있을뿐만 아니라 "컨테이너 관리"를 선택하면 응용 프로그램이 실행되는 동안 "전략을 업데이트하십시오.

    Spring OSGi Compendium 서비스를 살펴보면 "managed-properties"라는 속성 관리자가 있습니다.이 속성 관리자를 사용하면 런타임에 속성을 업데이트 할 수있을뿐만 아니라 "컨테이너 관리"를 선택하면 응용 프로그램이 실행되는 동안 "전략을 업데이트하십시오.

  3. ==============================

    3.이 질문을 이해했다면, FactoryBean을 사용하여 Spring에서 빈 생성 로직을 커스터마이징 할 수있다.

    이 질문을 이해했다면, FactoryBean을 사용하여 Spring에서 빈 생성 로직을 커스터마이징 할 수있다.

  4. from https://stackoverflow.com/questions/2008175/apply-dynamic-properties-to-a-bean-at-runtime by cc-by-sa and MIT license