Spring

@Scope 어노테이션이 필요한 이유우리가 Bean을 만들 때 기본적으로 싱글톤으로 만들어진다. 즉, 한 번 생성되면 해당 Bean이 필요한 곳 모두에서 재사용된다. 만약 순수 함수로만 구성된 Bean이거나 애플리케이션 실행 도중 하나의 공통된 상태만 유지하면 되는 객체라면 이렇게 싱글톤으로 생성한 후 모든 곳에서 재사용하면 된다.하지만, 종종 상태를 가지면서 이 상태가 사용되는 곳마다 다르게 관리돼야 하는 Bean이 있다. 예를 들어 사용자를 위한 장바구니 객체를 만들었는데 사용자마다 다른 장바구니가 만들어져야 하는 경우가 있을 수 있다. 이런 경우에는 Bean이 필요할 때마다 새로운 인스턴스가 생성돼야 한다.Spring은 이러한 상황들을 위해 Bean이 생성되는 방식을 제공하는 @Scope 어노테이션..
@AutoWired란?스프링은 생성자 주입(Constructor Injection), 세터 주입(Setter Injection), 필드 주입(Field Injection) 이라 불리는 의존성을 주입하기 위한 세가지 방법을 제공한다. 그리고 이들은 @AutoWired란 어노테이션을 통해 주입된다. 지금부터 이 세가지 방법을 알아보자. 생성자 주입생성자 주입을 하기 위해서는 생성자 함수 constructor가 필요하다. constructor 앞에 @Autowired를 사용함으로써 생성자 주입을 할 수 있다. 예를 들어 UserCreator이 UserRepository를 주입 받는다면 다음과 같이 작성이 가능하다.@Componentclass UserCreator @Autowired constructor( ..
지연 초기화가 필요한 이유@Component 어노테이션이나 @Bean 어노테이션을 통해 IOC Container에 Bean을 등록하면 스프링 애플리케이션 시작 시 등록된다. 예를 들어 다음과 같이 초기화 시 InitTestUseCase Initialized 를 출력하는 InitTestUseCase를 만들어보자.@Componentclass InitTestUseCase { init { println("InitTestUseCase initialized") }} 그런 다음 Configuration 파일을 다음과 같이 만든 후@ComponentScan@Configurationclass InitConfiguration 다음과 같이 컨테이너를 초기화 하고, "After container ini..
@ComponentScan의 기본 동작클래스에 @Configuration 어노테이션과 함께 @ComponentScan 어노테이션이 붙어 있으면, 해당 Configuration 은 해당 패키지 하위의 모든 클래스를 스캔해 @Component 어노테이션이 붙은 객체들을 모두 Bean으로 만든다. 예를 들어 다음과 같은 패키지 구조와 파일들이 있다고 해보자.  section8 패키지는 다음 경로에 있다: com.kotlinworld.spring.di.section8  이곳에서 ScanConfiguration파일은 @Configuration 어노테이션과 @ComponentScan 어노테이션이 붙은 클래스이고@ComponentScan@Configurationclass ScanConfiguration ScanReq..
@Component를 사용하지 못하고 @Bean을 사용해야 하는 경우@Component 어노테이션은 클래스 위에 붙는다. 즉, 내가 클래스를 만들 수 있을 때만 사용할 수 있다. 예를 들어 외부 라이브러리의 클래스를 Bean으로 만들 경우 @Component를 사용할 수는 없다. 예를 들어 A메신저에서 라이브러리를 제공하는데, 이 라이브러리에는 A메신저의 채팅방에 알림을 보내기 위한 AChatService 라는 클래스를 제공한다고 해보자.// 다른 라이브러리의 클래스라서 수정할 수 없다고 가정class AChatService() { fun sendMessage(message: String) { println("Message sent: $message") }} 이런 경우 우리는 A..
Dev.Cho
'Spring' 카테고리의 글 목록