[Spring] Bean

1.소개

BeanSpring 컨테이너에서 관리하는 객체를 의미한다.

일반적으로 @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하면 Spring이 자동으로 빈을 생성하고 관리한다.

 

2. 특징

  1. Spring 컨테이너에서 관리
    • 개발자가 직접 객체를 생성하는 것이 아닌 Spring이 생성하고 관리함.
  2. 싱글턴이 기본 적용
    • 기본적으로 Spring Bean은 싱글턴(애플리케이션 실행 중 하나의 인스턴스만 생성)으로 관리된다.
  3. 의존성 주입 (DI) 지원
    • @Autowired 등을 사용하여 필요한 곳에 자동으로 빈을 주입할 수 있다.

 

그냥 Spring Framework에서 대신 객체를 생성해주고 필요한 곳에 할당해주는 거라고 생각하면된다. 객체 == 빈

 

3. Bean 등록 방법

1) 어노테이션을 사용한 빈 등록 (Component Scan)

Spring Boot에서는 보통 자동 스캔 방식을 사용하여 빈을 등록한다.

@Component // 빈으로 등록됨
public class MyBean {
    public void doSomething() {
        System.out.println("Bean입니다");
    }
}

 

@Component를 사용하면 Spring 컨테이너가 이 클래스를 빈으로 등록한다.

@Service, @Repository, @Controller는 @Component를 확장한 것

 

2) 직접 빈으로 등록하기 (@Configuration + @Bean)

@Bean을 사용하면 직접 빈을 등록할 수 있다.

@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

 

@Configuration 클래스에서 @Bean 메서드를 정의하면, 반환된 객체가 Spring 컨테이너에서 관리하는 빈이 된다.

 

3) XML을 이용한 빈 등록 

 

xml 설정을 사용할 수도 있는데, 요즘은 거의 사용되지 않음

<beans>
    <bean id="myBean" class="com.example.MyBean"/>
</beans>

 

id="myBean"으로 지정된 이름으로 빈을 가져올 수 있다.

 

4. Bean 사용하기 (의존성 주입)

1) @Autowired로 자동 주입

Spring이 알아서 MyBean 객체를 찾아서 넣어준다.

@Component
public class MyService {
    private final MyBean myBean;

    @Autowired  // 자동으로 MyBean을 주입
    public MyService(MyBean myBean) {
        this.myBean = myBean;
    }

    public void execute() {
        myBean.doSomething();
    }
}

 

2) ApplicationContext로 직접 가져오기

Spring 컨테이너에서 Bean을 직접 가져올 수도 있다.

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();

 

5. Bean의 스코프

Bean은 기본적으로 싱글턴이지만, 필요에 따라 스코프를 변경할 수 있다.

스코프 종류 설명
singleton 애플리케이션이 실행하는 동안 하나의 인스턴스만 생성됨
prototype 요청할 때마다 새로운 객체가 생성됨
request HTTP 요청마다 새로운 객체가 생성됨
session HTTP 세션마다 하나의 객체가 생성됨

 

예제

@Component
@Scope("prototype") 
public class PrototypeBean {
    public PrototypeBean() {
        System.out.println("Prototype Bean이다");
    }
}

 

 

6. 정리

  • Bean은 Spring 컨테이너가 관리하는 객체
  • 어노테이션 (@Component, @Service, @Repository) 사용하면 자동 등록
  • 직접 등록할 때는 @Bean 사용도 가능
  • 싱글턴이 기본이고 @Scope로 변경 가능
  • 의존성 주입을 통해 사용 가능

 

 

Spring에서는 모든 주요 객체를 Bean으로 관리하니까 Bean의 개념을 잘 알아놓자!