스프링 프레임워크는 기본적으로 모든 빈(Bean)을 싱글턴(Singleton)으로 관리합니다. 이는 스프링 컨테이너에서 관리되는 각각의 빈에 대해 하나의 인스턴스만 생성되고, 애플리케이션 내에서 그 인스턴스가 공유된다는 의미입니다.
기본 설정: 스프링에서 빈을 정의할 때 특별한 설정을 하지 않으면, 기본적으로 싱글턴 스코프를 가집니다.
<!-- 기본적으로 싱글턴 스코프를 가짐 -->
<bean id="myBean" class="com.example.MyClass" />
혹은 자바 설정 파일에서:
@Configuration
public class AppConfig {
@Bean
public MyClass myBean() {
return new MyClass();
}
}
싱글턴 스코프: scope 속성을 사용하여 명시적으로 싱글턴 스코프를 지정할 수도 있습니다.
<bean id="myBean" class="com.example.MyClass" scope="singleton" />
싱글턴의 의미: 스프링의 싱글턴은 애플리케이션 컨텍스트(Application Context) 내에서 하나의 인스턴스만 생성됨을 의미합니다. 따라서 동일한 빈을 요청할 때마다 동일한 인스턴스가 반환됩니다.
싱글턴 빈 사용 예제:
@Component
public class MyService {
public void performTask() {
System.out.println("Task performed.");
}
}
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {}
public class MainApplication {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyService service1 = context.getBean(MyService.class);
MyService service2 = context.getBean(MyService.class);
System.out.println(service1 == service2); // true, 동일한 인스턴스
service1.performTask();
}
}
위 코드에서 MyService 빈은 스프링 컨테이너에 의해 관리되며, 애플리케이션 내에서 여러 번 요청하더라도 동일한 인스턴스가 반환됩니다.