2011-12-28 2 views
2

대부분의 경우 서비스 클래스는 봄에 의해 관리되며 싱글 톤입니다. 어떤 상황에서는, 도메인 코드는 스프링에 의해 관리되지 않으면 작동하지 않는 주입이 필요합니다. 즉, 프로토 타입 등의 범위와 @Bean 모든 도메인 수업을 집중적 것이 좋습니다 아닌 성능과 언제든지 당신은 단지에봄은 모든 도메인 클래스 프로토 타입을 만드는 것이 좋습니다

Person p = ctx.getBean("person"); 

어떤 도움을

Person p = new Person(); 

하고 싶지 말했다되고 장단점은 높이 평가 될 것이다.

+0

당신은 어느 것이 더 나은가요? 질문이 조금 불분명하다. –

+0

* 일부 상황에서는 도메인 코드에 injection *이 필요합니다. 내가 너라면이 상황을 없애려고 노력할거야. –

+0

모든 도메인 클래스의 프로토 타입 빈을 만들 수 있는지 확인하려고합니다. – user373201

답변

0

새로운 키워드 (Spring IoC 컨테이너에서 수행되는 모든 의존성 주입, 라이프 사이클 콜백 등)를 통해 직접 인스턴스화하는 것보다 프로토 타입 bean을 확보하는 데 더 많은 오버 헤드가 발생합니다. 단일 인스턴스화에서는 중요하지 않겠지 만 루프에서이 작업을 수행하면 성능 문제가 발생할 수 있습니다.

그러나 싱글 톤 bean (일반적으로 서비스) 또는 자원 (예 : DataSource)이 필요한 경우에는 프로토 타입 bean을 사용하는 것이 좋습니다. 추가 종속성은 자동으로 유선됩니다.

성능 고려 사항 외에도 선택에 따라 디자인이 달라질 수 있습니다. 서비스 계층을 가진 "전통적"아키텍처와 도메인 객체가 속한 데이터 액세스 객체를 따를 경우 Spring의 관점에서는 일반적으로 상태가 저장되지 않습니다. 귀하의 서비스 및 데이터 액세스 객체는 POJO의 도메인 객체를 사용하는 싱글 톤입니다. 여기서 프로토 타입 빈은 거의 필요하지 않습니다.

반면에 객체에 stateless factory (인스턴스를 가져 오거나 만들 수 있도록 허용)가있는 객체 지향 접근법을 따르고 객체가 자체적으로 지속될 수 있다면 ('save' 메서드)를 사용하면 거의 모든 도메인 객체가 프로토 타입 빈이 될 수 있습니다.

거의 모든 결정에서와 마찬가지로 트레이드 오프와 아무런 정답도 없을 것입니다.

관련 문제