본문 바로가기
웹개발/spring && springboot

Spring bean과 ioc관련 어노테이션

by 지구별 여행자 임탱 2024. 3. 28.
728x90

Spring Bean은 Spring Framework에서 중요한 역할을 하는 개념입니다. Spring IoC(Inversion of Control) 컨테이너에 의해 관리되는 객체로, 애플리케이션의 핵심을 이루는 자바 객체입니다.
  - 특징 : Bean은 클래스의 등록 정보, Getter/Setter 메서드를 포함하며, 컨테이너에 사용되는 설정 메타데이터로 생성됩니다. 설정 메타데이터는 XML 또는 자바 어노테이션, 자바 코드로 표현되며, 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체 등을 정의합니다.
@Bean 어노테이션을 통해 메서드로부터 반환된 객체를 Spring 컨테이너에 등록할 수 있습니다.

@Configuration
public class AppConfig {

    @Bean(name = "customBeanName")
    public MyBean myBean() {
        return new MyBean();
    }
}

 

Spring Bean의 구성 요소
  - class: Bean으로 등록할 Java 클래스.
  - id: Bean의 고유 식별자.
  - scope: Bean의 범위를 정의(singleton, prototype 등).
  - constructor-arg: Bean 생성 시 생성자에 전달할 파라미터.
  - property: Bean 생성 시 setter에 전달할 인수. 

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myBean" class="com.example.MyBean">
        <property name="anotherBean" ref="anotherBean"/>
    </bean>
    
    <bean id="anotherBean" class="com.example.AnotherBean"/>
    
</beans>

 

Spring 컨테이너와의 관계
  - ApplicationContext: Spring 컨테이너 중 하나로, @Configuration이 붙은 클래스를 설정 정보로 사용합니다. 이 설정 정보 내의 @Bean 어노테이션이 붙은 메서드를 호출하여 반환된 객체를 모두 Spring 컨테이너에 등록합니다.
  - BeanFactory와 ApplicationContext: BeanFactory는 Spring 컨테이너의 최상위 인터페이스로, ApplicationContext는 이를 상속받아 좀 더 확장된 기능을 제공합니다.


IOC 관련 주요 어노테이션
@Component: 클래스를 Bean으로 등록하며, Component Scan을 통해 자동으로 탐지되어 Spring 컨테이너에 등록됩니다.
@Autowired: 의존성 주입(Dependency Injection)에 사용되며, Spring이 자동으로 의존 객체를 Bean에서 찾아 연결합니다.
@Configuration: 클래스가 Bean 구성 클래스임을 나타내며, 하나 이상의 @Bean 어노테이션이 달린 메서드를 포함하고 있음을 의미합니다.
@Bean: 메서드 레벨에서 사용되며, 해당 메서드가 생성하고 반환하는 객체를 Spring 컨테이너에 Bean으로 등록합니다.
@ComponentScan: @Component 어노테이션이 붙은 클래스를 스캔하여 Spring 컨테이너에 Bean으로 등록합니다.
@EnableAutoConfiguration: Spring Boot의 자동 설정을 활성화하는데 사용됩니다.