0

내 질문에 조금 복잡합니다 :) 내 설치 ... 계층 응용 프로그램 컨텍스트 및 표준-범위 및 맞춤 스코프

  • 내가 웹 응용 프로그램을 설명하려고합니다, 하나의 웹 스프링이입니다 세션 범위 콩, 때로는 aop-proxies 등 정상적인 물건과 컨텍스트 :)
  • 애플 리케이션 내에서 일부 하위 컨텍스트를 "시작"할 수있는 몇 가지 인프라를 만들려면,이 수동으로 별도로 정의 할 spring-configuration-classes,이 클래스들은 최상위/주 스프링 컨텍스트 - 빈 스캔에서 제외됩니다.이 하위 컨텍스트는 앱에 정의되지 않았습니다.
  • 하위 컨텍스트가있는 기능은 선택 사항이므로 기본 컨텍스트 내에서
  • 의 주 컨텍스트로만 애플리케이션을 실행할 수 있으며 하위 컨텍스트는 일부 클래스/인터페이스를 사용하여 "최상위"를 분리합니다. "sub-component-level"beans 두 개의 추가 한정자 주석을 만들었습니다 ...이 주석을 사용하여 autowiring 물건을 포주로 바른 콩이 올바른 장소에서 사용되는 것 같아요 :)
  • imagine 거기에 FooBarService가 있고 각 하위 컨텍스트에서 N 개의 FooBarService가있는 경우 각 서비스는 "자체"상태 여야하므로 전체 애플리케이션에서 N + 1 인스턴스가 실행 중임
  • 일부 하위 컨텍스트 bean은 최상위 수준의 beans 등을 사용 (삽입)합니다.
  • 이 지금까지

  • 을 작동하는 것 같다하지만 지금은 큰 메모리 누수 :(내가 문제를 찾은 것 같아 ... 나는 내 자신의 "세션 범위의"생성 된 하위 구성 요소에 대한

  • 조사 구현 (해시지도, 실제 정리 등 없음 urgs) 그리고이 "내"(수동으로 시작한) 하위 컨텍스트에 대해 "세션"으로 "CustomScopeConfigurer"를 통해 범위를 등록했습니다 ...이 " 내 하위 컨텍스트 스프링 구성 클래스의 @ normal (@ value = WebApplicationContext.SCOPE_SESSION) 접근 방식

Q1 :이 "수제"범위가 좋은 아이디어입니까? : D Q2 :이 "수제"범위는 "세션 범위"내에서 일종의 "변환 범위"여야하지만이 범위는 "세션"에 N 번 존재하므로 "대화 1 -scope ","conversation-2-scope "..."conversation-N-scope " Q3 : 언제"대화 범위 "를 정리할 수 있습니까? 이 권리는 -

  • 은 내가 "하위 상황"에서 발견되지 않은 빈은 부모 컨텍스트에서 (시도) 요청 것이라고 계층 스프링 컨텍스트에서 예상?

Q4 : 여기

final ConfigurableListableBeanFactory parentBeanFactory = ((AbstractApplicationContext) parentSpringContext).getBeanFactory(); 
    final ConfigurableListableBeanFactory beanFactory = springApplicationContext.getBeanFactory(); 
    final String[] scopeNames = parentBeanFactory.getRegisteredScopeNames(); 
    for (final String scopeName : scopeNames) { 
    final Scope scope = parentBeanFactory.getRegisteredScope(scopeName); 
    beanFactory.registerScope(scopeName, scope); 
    } 

내 "구조"의 시각화 :이 같은 "서브 컨텍스트"에서 "부모 컨텍스트"에서 알려진 모든 범위를 등록 할 필요가있다 :

 
TOP-LEVEL-Context 
|-* session-scoped beans 
|-* singleton beans (HelloWorldService) 
| 
|->SUB1-Context 
| |-* session-scoped beans (FooBarService - depends on HelloWorldService) 
| |-* singleton beans 
| 
|->SUB2-Context 
| |-* session-scoped beans (FooBarService - depends on HelloWorldService) 
| |-* singleton beans 
| 
|->... 

모든 힌트는 멋진 :)

종류가 안드레아스

간주 될 것

답변

0

언제든지 WeakHashMap을 찾고 계십니까 ...?

나는 모든 스프링 쓰레기에 대해 전혀 몰라 :) -하지만 앞에서 설명한 것은 Dagger2를 사용할 때 하위 그래프를 만들고 나중에 자동으로 해제해야 할 때 편리합니다.

+0

Hahha ... 안녕하세요 토마스 ... 아직 다른 DI 프레임 워크는 제발;) 종류는 라이프 치히에서 안부를 전합니다 :) –