Spring Bean Context에 사용되지 않은 Bean이 많으면 상당한 리소스가 낭비됩니까?

StackOverflow https://stackoverflow.com/questions/98320

  •  01-07-2019
  •  | 
  •  

문제

내 모델 레이어는 소수의 다른 프로젝트에서 사용되고 있으며 어떤 프로젝트를 사용하는지에 관계없이 모델에 대해 단일 XML Spring 구성 파일을 사용하고 싶습니다.

내 질문은 다음과 같습니다모든 프로젝트에서 모든 Bean이 사용되는 것은 아니기 때문에 인스턴스화되지 않으면 상당한 양의 리소스를 낭비하게 됩니까?지금까지 문제가 된 적이 없었기 때문에 Spring이 로딩에 대해 얼마나 게으른지 잘 모르겠습니다.

어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

에서 가져온 스프링 참조 매뉴얼:

ApplicationContext 구현의 기본 동작은 시작 시 모든 싱글톤 Bean을 적극적으로 사전 인스턴스화하는 것입니다.사전 인스턴스화는 ApplicationContext가 초기화 프로세스의 일부로 모든 싱글톤 Bean을 적극적으로 생성하고 구성한다는 것을 의미합니다.일반적으로 이는 구성이나 주변 환경의 오류가 즉시 발견된다는 것을 의미하기 때문에 좋은 것입니다(몇 시간 또는 며칠이 걸릴 수도 있음).

그러나 이 동작이 원하는 동작이 아닌 경우가 있습니다.ApplicationContext를 사용할 때 싱글톤 Bean이 사전 인스턴스화되는 것을 원하지 않으면 Bean 정의를 지연 초기화로 표시하여 이를 선택적으로 제어할 수 있습니다.지연 초기화된 Bean은 시작 시 또는 처음 요청될 때 Bean 인스턴스를 생성해야 하는지 여부를 IoC 컨테이너에 나타냅니다.

XML을 통해 Bean을 구성할 때 이 지연 로딩은 [bean 요소]의 'lazy-init' 속성에 의해 제어됩니다.예를 들어:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

그러나 Bean이 파일 잠금이나 데이터베이스 연결과 같은 리소스를 사용하지 않는 한, 여러(그러나 다른) 프로필에 대해 이 단일 구성을 사용하는 것이 더 쉽다면 단순한 메모리 오버헤드에 대해 크게 걱정하지 않을 것입니다.

다른 팁

다른 의견 외에도 다음과 같습니다.또한 'default-lazy-init' 속성을 사용하여 지연 초기화되도록 전체 구성 파일을 지정할 수도 있습니다. <beans/> 요소;예를 들어:

<beans default-lazy-init="true">
    <!-- no beans will be pre-instantiated... -->
</beans>

이것은 추가하는 것보다 훨씬 쉽습니다. lazy-init 콩이 많으면 모든 콩에 속성을 지정하세요.

기본적으로 Spring 빈은 싱글톤이며 애플리케이션 컨텍스트가 생성될 때(시작 시) 인스턴스화됩니다.따라서 기본 동작을 재정의하지 않았다고 가정하면 모든 Bean의 단일 인스턴스가 생성됩니다.

개체에 따라 다릅니다.

그러나 사용하지 않는 코드는 '조작'이며 유지 관리 비용이 증가합니다.

심판과 클래스를 삭제하는 것이 좋습니다.나중에 필요할 경우 언제든지 버전 제어에서 복원할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top