https://melonicedlatte.com/2021/07/11/232800.html
https://velog.io/@hyun-jii/%EC%8A%A4%ED%94%84%EB%A7%81-component-scan-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EB%8F%99%EC%9E%91-%EA%B3%BC%EC%A0%95
Spring Bean은 Spring Framework에서 제공하는 객체입니다.
Spring bean은 XML 파일, Java 코드, Annotation 등을 이용하여 등록할 수 있습니다.
등록된 Spring bean은 Spring 컨테이너에서 관리되며, 필요한 곳에서 DI(Dependency Injection)를 통해 사용됩니다.
일반적인 Java 객체와 같이 필드, 메소드, 생성자 등을 가지며, Spring Framework에서는 이 Bean 객체를 IoC(제어의 역전) 및 DI(의존성 주입)을 통해 관리하고 활용합니다.
일반적으로 애플리케이션의 로직을 처리하는 객체, 데이터베이스 연결을 담당하는 객체, 캐시를 관리하는 객체 등 다양한 용도로 사용됩니다
객체 생성, 초기화, 의존성 주입, 소멸 등의 라이프 사이클을 자동으로 관리할 수 있습니다.
애플리케이션의 개발과 유지보수가 용이해지며, 객체 간의 결합도를 낮추어 유연하고 확장 가능한 애플리케이션을 개발할 수 있습니다.
AOP(관점 지향 프로그래밍) 등의 다양한 기능을 제공하므로, 보다 다양하고 복잡한 애플리케이션 개발에도 유용하게 사용됩니다.
1. XML 파일 이용하기
Spring Bean을 등록하는 가장 전통적인 방법입니다. XML 파일에 Bean의 정보를 작성하고, Spring이 이를 읽어들여 Bean을 생성합니다.
=================================================================================================================
<bean id="myBean" class="com.example.MyBean"/>
=================================================================================================================
2. Component Scanning 이용하기
Component Scanning을 이용하면, Spring이 자동으로 Bean을 스캔하여 등록합니다.
이 방법은 클래스에 @Component Annotation을 지정하여 Bean으로 등록하는 방법입니다.
이외에도 @Service, @Controller, @Repository 등의 Annotation을 이용하여 Bean으로 등록할 수 있습니다.
- JAVA 파일
=================================================================================================================
@Component
public class MyBean {
// ...
}
=================================================================================================================
- XML 파일
=================================================================================================================
<context:component-scan base-package="com.sungchul.test, com.sungchul.main"/>
=================================================================================================================
3. Java Configuration 이용하기
Java 클래스에서 Spring Bean을 생성하고 구성하는 방법입니다.
@Configuration Annotation을 이용하여 Java 클래스를 설정 파일로 지정하고, @Bean Annotation을 이용하여 Bean을 생성합니다.
=================================================================================================================
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
=================================================================================================================
4. XML 파일과 Java Configuration 혼용하기
Java Configuration 방법과 XML 파일을 혼용하여 Bean을 등록할 수 있습니다.
XML 파일에서는 Java Configuration을 참조하는 방식으로 Bean을 등록할 수 있습니다.
=================================================================================================================
<bean id="myBean" class="com.example.MyBean"/>
<bean class="com.example.AppConfig">
<bean id="anotherBean" class="com.example.AnotherBean"/>
</bean>
=================================================================================================================
1. ConfigurationClassParser가 Configuration 클래스를 파싱하여 BeanDefinition을 생성합니다.
@Bean, @ComponentScan, @Component, @Autowired 등의 어노테이션을 파싱하며, BeanDefinition이 생성됩니다.
2. ComponentScanAnnotationParser가 @ComponentScan 어노테이션을 파싱하여 해당 패키지를 스캔합니다.
@Component, @Service, @Repository, @Controller 등의 어노테이션이 존재하는 클래스를 찾아 BeanDefinition을 생성합니다.
3. ClassLoader가 로딩한 클래스들을 기반으로 BeanDefinition을 생성합니다.
4. 생성된 BeanDefinition을 토대로 Bean을 생성합니다.
1. Bean Definition의 로딩
Spring Framework는 XML 파일, Java Annotation, Java Configuration 등 다양한 방법으로 Bean Definition을 로딩합니다.
2. Bean Definition의 Parsing
Spring Framework는 로딩된 Bean Definition을 파싱하여 객체화합니다.
3. Bean 생성
Bean Definition에 따라 Spring Container는 Bean 객체를 생성합니다.
4. Dependency Injection(DI)
Spring Container는 Bean 객체의 의존성을 주입합니다.
5. Bean Post Processing
Spring Container는 Bean 객체를 생성한 후, BeanPostProcessor를 사용하여 Bean 객체를 수정할 수 있습니다.
6. Initializing Bean
Bean 객체가 생성되고, DI가 이루어진 후에 InitializingBean 인터페이스를 구현한 메소드를 호출합니다.
7. Custom Init Method
Bean 객체가 생성되고, DI가 이루어진 후에, 개발자가 직접 작성한 초기화 메소드를 호출합니다.
8. 사용
Bean 객체가 초기화되고, 사용 가능한 상태가 됩니다.
9. DisposableBean
Spring Container가 종료될 때, DisposableBean 인터페이스를 구현한 메소드를 호출하여 Bean 객체를 소멸합니다.
10. Custom Destroy Method
개발자가 직접 작성한 소멸 메소드를 호출하여 Bean 객체를 소멸합니다.
Spring Bean의 라이프사이클을 이해하면, Bean이 언제 생성되고 소멸되는지를 알 수 있으므로, 객체 생성 및 관리를 보다 효율적으로 할 수 있습니다.