package com.in28minutes.learnspringframework.examples.e1;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
class NormalClass {
}
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) //프로토타입 클래스
@Component
class PrototypeClass {
}
@Configuration
@ComponentScan
public class BeanScopesLauncherApplication {
// @Bean
// public GameRunner gameRunner(GamingConsole game){
// var gameRunner = new GameRunner(game);
// return gameRunner;
// }
public static void main(String[] args) {
var context = new AnnotationConfigApplicationContext(BeanScopesLauncherApplication.class);
System.out.println(context.getBean(NormalClass.class));
System.out.println(context.getBean(NormalClass.class));
// 해시코드가 똑같이 나옴
System.out.println(context.getBean(PrototypeClass.class));
System.out.println(context.getBean(PrototypeClass.class));
System.out.println(context.getBean(PrototypeClass.class));
// 다른 해시코드가 나옴 (Bean 인스턴스가 새로 생성된다.)
//싱글톤 -> Spring IOC 컨테이너당 객체 인스터스가 딱 한개가 나온다.
//싱글톤이 default
// 스프링 싱글톤 vs 자바 싱글톤
// 스프링 싱글톤의 경우 Spring ioC 컨테이너당 객체 인스턴스가 하나라고 이야기한다.
// Java 싱글톤에서는 Java 가상 머신 하나당 객체 인스턴스가 하나다. Java 가상 머신 전체에서 객체가 하나이다.
// 자바 싱글톤에서 스프링 컨테이너를 여러개를 실행하지 않는다 -> Spring 싱클톤 = Java 싱글톤이다.
}
}
@Scope
스프링에서 Bean으로 지정된 객체는 기본적으로 싱글톤 객체로 관리된다. 하지만 요구사항 과 구현기능 등의 필요에 따라서 비싱글톤이 필요한 경우도 많다. 스프링에서는 이를 명시적으로 구분하기 위해서 scope라는 키워드를 제공한다.
singleton – IoC 컨테이너당 하나의 빈을 리턴
싱글톤 vs 프로토타입
싱글톤
Spring IoC 컨테이너당 객체 인스턴스가 하나이다.
System.out.println(context.getBean(NormalClass.class));
System.out.println(context.getBean(NormalClass.class));
그래서 getBean을 하여 출력을 해도 해시코드가 똑같이 나오는걸 알 수 있다.
프로토타입
Spring IoC 컨테이너당 객체 인스턴스가 여러개일 수 있다.
System.out.println(context.getBean(PrototypeClass.class));
System.out.println(context.getBean(PrototypeClass.class));
System.out.println(context.getBean(PrototypeClass.class));
그래서 getBean을 하여 출력하면 다른 해시코드가 나오는걸 알 수 있다.
싱글톤타입 사용법
싱글톤타입이 default다.
프로토타입 사용법
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) //프로토타입 클래스
이 코드를 사용하면 프로토타입 클래스로 바꿀 수 있다.
Java 싱글톤 vs 스프링 싱글톤
Java 싱글톤에서는 Java 가상 머신 하나당 객체 인스턴스가 하나다. 그래서 Java 가상 머신 전체에서 객체가 하나이다.
스프링 싱글톤의 경우 Spring IoC 컨테이너당 객체 인스턴스가 하나라고 이야기한다.
Tip
자바 싱글톤에서는 스프링 컨테이너를 여러개 실행시키지 않기 때문에 자바 싱글톤은 스프링 싱글톤이라고 할 수 있다.
개념들을 조금 더 찾아보았지만 아직 이해하기 힘든 수준의 개념인 것 같다.
만약 이 개념들을 이해하며 사용할 날이 왔을 때 글을 좀 더 수정할 것 이다.
참고:
https://javaslave.tistory.com/45
Spring Bean Scope 정리
Spring Bean Scope 스프링에서 Bean으로 지정된 객체는 기본적으로 싱글톤 객체로 관리된다. 하지만 요구사항 과 구현기능 등의 필요에 따라서 비싱글톤이 필요한 경우도 많다. 스프링에서는 이를 명
javaslave.tistory.com
'백엔드 > Java Spring Boot 풀스택 클라우드 개발자 되기!' 카테고리의 다른 글
aop (0) | 2024.03.23 |
---|---|
Spring Security (0) | 2023.09.23 |
responseBody (0) | 2023.07.05 |
logging 간단 정리 (0) | 2023.06.26 |
Annotations vs XML Configuration (0) | 2023.06.22 |