
Spring 프레임워크에서 Bean은 Spring IoC 컨테이너에 의해 관리되는 객체를 의미합니다. Bean은 애플리케이션의 다양한 구성 요소로서, Spring의 핵심 개념 중 하나입니다. 다음은 Spring Bean에 대한 자세한 설명입니다. → 객체의 생성과 의존성 관리를 개발자가 해주지 않아도 됩니다
XML 설정: XML 파일에서 Bean을 정의합니다.
<bean id="myBean" class="com.example.MyClass">
<property name="propertyName" value="value" />
</bean>
어노테이션 설정 (묵시적 빈 정의): 어노테이션을 사용하여 Bean을 정의합니다.
@Component 어노테이션을 통해서 Spring이 해당 클래스를 스캔하고 Bean으로 등록하게 할 수 있음@Component 어노테이션이 붙여진 Bean은 다른 클래스에서는 @Autowired 어노테이션을 주입받아 사용할 수 있음import org.springframework.stereotype.Component;
@Component
public class MyClass {
private String propertyName;
// Getter and Setter
}
자바 기반 설정 (명시적 빈 정의): 자바 클래스를 사용하여 Bean을 정의합니다.
@Configuration 어노테이션을 추가하고, @Bean 어노테이션을 붙여서 명시적으로 Bean을 지정할 수 있음import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyClass myBean() {
return new MyClass();
}
}
Spring Bean의 생명 주기는 다음과 같은 단계로 이루어집니다:
@PostConstruct 어노테이션이나 InitializingBean 인터페이스를 통해 초기화 작업을 수행합니다.@PreDestroy 어노테이션이나 DisposableBean 인터페이스를 통해 정리 작업을 수행합니다.Spring Bean은 Spring IoC 컨테이너에 의해 관리되는 객체로, 애플리케이션의 다양한 구성 요소를 표현합니다. Bean은 의존성 주입을 통해 다른 Bean과 연결되며, IoC 컨테이너는 Bean의 생명 주기를 관리합니다. Bean의 설정은 XML, 어노테이션, 자바 기반 설정을 통해 이루어질 수 있습니다.
Spring에서 팩토리(Factory)와 컨테이너(Container)는 비슷한 역할을 수행하는 것처럼 보일 수 있지만, 그 기능과 목적에 있어 명확한 차이가 있습니다. 이 두 개념의 차이점을 아래와 같이 정리해 드리겠습니다.
BeanFactory와 같은 Spring의 팩토리는 필요한 시점에 Bean을 생성하고 반환합니다.팩토리는 객체를 생성하는 책임을 가진 클래스 또는 메커니즘입니다. Spring에서는 일반적으로 객체를 생성하는 데 사용되는 여러 가지 패턴이 있으며, 그 중에서 팩토리 메소드 패턴(Factory Method Pattern)과 추상 팩토리 패턴(Abstract Factory Pattern)이 널리 사용됩니다.
Spring에서는 BeanFactory와 ApplicationContext 같은 컨테이너가 내부적으로 팩토리 역할을 수행하여 Bean을 생성합니다. 이 팩토리는 Bean의 생성, 초기화, 의존성 주입을 관리합니다.
public class MyBean {
public MyBean() {
System.out.println("MyBean instance created!");
}
}
<beans>
<bean id="myBean" class="com.example.MyBean"/>
</beans>
이 XML 설정을 사용하여 ApplicationContext는 MyBean의 인스턴스를 생성할 때 팩토리 역할을 합니다.
ApplicationContext와 BeanFactory가 컨테이너로 사용됩니다.컨테이너는 Spring의 핵심 개념으로, Bean의 생성과 생명주기를 관리하는 객체입니다. Spring은 두 가지 주요 컨테이너를 제공합니다: BeanFactory와 ApplicationContext.
BeanFactory의 확장으로, 더 많은 기능을 제공합니다. 스프링의 모든 기능을 사용할 수 있으며, 이벤트 처리, 국제화, AOP(Aspect Oriented Programming) 지원 등 다양한 기능을 포함합니다. 일반적으로 Spring 애플리케이션에서 사용하는 주요 컨테이너입니다.@Autowired, @Inject와 같은 애너테이션 또는 XML 설정을 통해 이루어집니다.| Feature | Factory | Container |
|---|---|---|
| 주요 기능 | 객체 생성 | 객체 생성, 의존성 주입, 생명주기 관리 |
| 주요 역할 | 객체 초기화와 생성 | 전체 애플리케이션의 구조 및 관리 |
| 예시 | BeanFactory, Factory Method | ApplicationContext, BeanFactory |
| 복잡성 | 상대적으로 단순 | 상대적으로 복잡하고 기능이 풍부 |
따라서 이 둘은 비슷한 점도 있지만, 각각의 역할과 기능에 따라 다르게 이해해야 합니다. 팩토리는 객체 생성에 더 중점을 두고, 컨테이너는 애플리케이션 전반의 관리와 관련된 더 포괄적인 개념입니다.