[Spring] 스프링 빈 Spring Bean
★ 스프링 빈 Spring Bean
Bean 은 Spring IoC 컨테이너가 관리하는 자바 객체로, 스프링에 의해 생성되고 관리되는 인스턴스화된 객체입니다.
ApplicationContext(IoC 컨테이너)가 생성하고 관리하며 Bean 을 얻기 위해 ApplicationContext.getBean() 과 같은 메소드를 사용합니다.
Bean 은 클래스의 등록 정보, Getter/Setter 메소드를 포함하며, 컨테이너에 사용되는 설정 메타데이터로 생성됩니다.
이때 설정 메타데이터는 XML, 자바 Annotation, 자바 코드로 표현되며, 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체 등을 정의합니다.
★ Spring Bean 을 Spring IoC Container 에 등록하는 방법
1. @Component 어노테이션
스프링에서 Bean 으로 등록하기 위해 @Component 어노테이션을 사용합니다.
스프링은 @Component 로 등록되어 있는 경우 자동으로 Bean 으로 등록합니다.
@Component 는 ElementType.TYPE 설정이 있으므로 Class 혹은 Interface 에만 붙일 수 있습니다.
@Component 이외에도 이를 상속받는 @Controller, @Service, @Repository, @Configuration 어노테이션도 Bean 으로 자동 등록됩니다.
- Controller - 스프링 MVC 의 컨트롤러로 인식됨
- Repository - Data Access Object 와 같이 실제 데이터 근원과 소통하는 스프링 데이터 접근 계층으로 인식됨. 해당 계층에서 발생하는 예외는 모두 DataAccessException 으로 변환함.
- Service: 특별한 처리는 하지 않으나, 개발자들이 핵심 비지니스 로직이 구현된 계층으로 인식하는데 도움을 줌
- Configuration: 스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 함
@Controller
public class PostController {
@GetMapping(“post”)
public String post(Model model) {
model.addAttribute(“data”, “this is data!”);
return “post”;
}
}
2. 직접 Bean 으로 등록 - @Configuration, @Bean 어노테이션
@Configuration 과 @Bean 어노테이션으로 Bean 을 등록하는 방법으로, 개발자가 컨트롤이 불가능한 외부 라이브러리들을 빈으로 등록하고 싶은 경우 사용합니다.
@Bean 은 ElementType.METHOD 와 ElementType.ANNOTATION_TYPE 설정임으로 메소드 또는 어노테이션 단위에만 붙일수 있습니다.
@Configuration 은 Bean 에 대해 싱글톤을 보장합니다.
스프링 프로젝트에서 Configuration 역할을 하는 클래스를 지정 후, 인스턴스를 생성하는 메소드 위에 @Bean 어노테이션을 사용하여 Bean 으로 등록합니다.
@Configuration
public class DemoConfiguration {
@Bean
public DemoController demoController() {
return new DemoController;
}
}