Spring에서 빈(Bean)은 Spring IoC 컨테이너가 관리하는 객체를 의미합니다. 즉, Spring에서 개발자가 작성한 객체를 Bean으로 등록하면 Spring 컨테이너에서 이 객체를 생성하고, 보관 및 제거 등을 수행합니다. 이때 Bean으로 등록되는 객체는 Spring이 제어할 수 있는 범위 내에 있어야 하며, 주로 Spring이 제공하는 다양한 기능을 사용하기 위해 Bean으로 등록됩니다.
Spring 컨테이너는 Bean을 생성하고 보관하며, 필요한 객체에 대해 의존성 주입을 수행합니다. 이렇게 컨테이너가 생성된 Bean을 필요로 하는 객체에게 주입하는 것을 DI(Dependency Injection)라고 합니다. DI를 통해 객체 간의 의존성을 최소화하고, 객체 간의 결합도를 낮춤으로써 유연하고 확장 가능한 애플리케이션을 만들 수 있습니다.
Spring에서 Bean은 일반적으로 XML, 어노테이션, 자바 설정(Configuration) 클래스를 통해 등록됩니다. 등록된 Bean은 컨테이너가 실행되는 동안 유지되며, 필요에 따라서 가져와서 사용할 수 있습니다.
Spring의 컨테이너는 일반적으로 ApplicationContext 인터페이스의 구현체로 제공됩니다. ApplicationContext는 BeanFactory 인터페이스를 상속받아 구현되며, BeanFactory에서는 Bean의 생성과 의존성 주입 등의 기본적인 기능만을 제공합니다. 반면 ApplicationContext에서는 다양한 기능들이 추가로 제공됩니다. 예를 들어, 메시지 소스를 활용한 다국어 처리, 환경 변수 설정, 프로퍼티 파일 처리, 이벤트 처리 등의 기능을 제공합니다.
즉, Spring의 빈과 컨테이너는 서로 밀접하게 연관되어 있습니다. Bean은 Spring이 제공하는 다양한 기능을 사용하기 위해 등록되며, 등록된 Bean은 Spring 컨테이너에서 관리됩니다. 이렇게 컨테이너에서 관리되는 Bean은 필요에 따라 가져와서 사용할 수 있으며, 이때 DI를 통해 객체 간의 의존성이 최소화되고 유연하고 확장 가능한 애플리케이션을 만들 수 있습니다.
@Configuration 어노테이션은 Spring Framework에서 Bean을 등록하고 관리하는 컨테이너인 ApplicationContext를 설정하는 클래스에 사용됩니다. 이 어노테이션을 붙인 클래스는 Bean을 생성하고 관리하는 역할을 하며, @Bean 어노테이션을 사용하여 Bean을 등록할 수 있습니다.
예를 들어, 다음과 같은 코드가 있다고 가정해봅시다.
@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
위 코드에서 MyConfiguration 클래스는 Spring의 ApplicationContext를 설정하는 클래스임을 나타내는 @Configuration 어노테이션이 붙어있습니다. myBean() 메서드는 MyBean 객체를 생성하여 Bean으로 등록하는 메서드로, @Bean 어노테이션이 붙어있습니다.
이렇게 @Configuration과 @Bean 어노테이션을 사용하여 Bean을 등록하면, Spring은 컨테이너를 초기화하고 Bean을 생성한 뒤 필요에 따라 의존성 주입을 수행하여 애플리케이션을 구성합니다. 이를 통해 애플리케이션의 구성이 유연하고 모듈화된 구조를 갖추게 됩니다.
'Programming > SpringBoot' 카테고리의 다른 글
DisplatcherServlet 동작 순서 (0) | 2023.02.24 |
---|---|
[Spring] AOP는 프록시 객체를 이용하여 구현하는 이유는? (0) | 2023.02.24 |
[Spring] AOP란? (0) | 2023.02.24 |
Spring 특징 요약 (0) | 2023.02.24 |
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor (0) | 2023.02.23 |