@Component로 클래스에 주석을 달 때 이것이 Spring Bean과 Singleton임을 의미합니까?


111

Spring을 처음 접하기 때문에 클래스 주석 달기에 대한 질문이 있습니다. 클래스에 주석을 달 때 @Component이것은이 클래스가 Spring Bean이고 기본적으로 싱글 톤임을 의미합니까?

답변:


129

예, 맞습니다 @Component. Spring bean과 Singleton입니다.

클래스가 서비스 계층에 속하는 경우 @Service대신 주석을 달 수 있습니다.

그러나 이러한 주석을 감지하려면이 줄을 applicationContext.xml다음 위치에 배치해야합니다 .

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

싱글 톤 정보-스프링 빈은 기본적으로 모두 싱글 톤 범위에 있습니다. 유일하게 염두에 두어야 할 것은 필드 변수에 상태를 저장하지 않아야한다는 것입니다 (종속성 만 보유해야 함). 따라서 애플리케이션은 스레드로부터 안전하며 매번 빈의 새 인스턴스가 필요하지 않습니다. 즉, 당신의 콩은 무국적자입니다.


1
@Component 및 또는 @Service 주석 등을 사용할 때 싱글 톤을 생성하고 있음을 의미합니다. 동시성 문제가 발생하지 않습니까? 내 초보자 아이디어에는 ApplicationContext 전체에서 사용되는 빈이 생성되므로 동시 사용자는 단일 빈에 대한 참조를 얻습니다. 아니면 내가 뭔가를 놓치고 있습니까?
Marco

3
@Marco 상태가 없으면 (스프링 빈과 다른 인스턴스 변수) 동시성 문제가 발생하지 않습니다.
Bozho

당신은 매번 빈의 새로운 인스턴스를 "원"하거나 매번 빈의 새로운 인스턴스를 "원"합니까?
Harshana

@Bozho "그리고 매번 새로운 빈 인스턴스가 필요하지 않을 것"이란 무슨 뜻입니까? Spring이 새 인스턴스를 만들 필요가 없거나 개발자가 새 인스턴스를 만들 필요가 없다는 의미입니까?
user1766169

24

기본적으로-예.

그러나 @Scope주석을 사용하여이 동작을 재정의 할 수 있습니다 . 예를 들면 :@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.