스프링 IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다. 자바 프로그래밍에서는 클래스를 생성하고 new 키워드를 이용하여 객체를 생성한 후 사용했다. 하지만 스프링에서는 스프링에 의하여 관리당하는 자바 객체를 사용한다. 이처럼 스프링에 의해 생성되고 관리되는 자바 객체를 빈이라고 한다.
컴포넌트 스캔은 @Component
를 명시하여 빈을 추가하는 방법이다. @Component
가 등록되어 있는 경우에는 어노테이션을 확인하고 자체적으로 컨테이너에 빈을 등록한다.
@Component
외에 @Controller
, @Service
, @Repository
, @Configuration
은 @Component
의 상속을 받고 있으므로 모두 컴포넌트 스캔의 대상이다.// HelloController.java
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "This is data!!");
return "hello";
}
}
@Configuration
과 @Bean
어노테이션을 이용하여 빈을 등록할 수 있다. @Configuration
을 이용하면 Configuration 역할을 하는 클래스를 지정할 수 있고 해당 파일의 하위에 Bean으로 등록하고자 하는 클래스에 @Bean
어노테이션을 이용하면 간단히 빈을 등록할 수 있다.
// Hello.java
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}
@Bean
개발자가 컨트롤이 불가능한 외부 라이브러리를 빈으로 등록하고 싶은 경우 사용.
메서드 또는 어노테이션 단위에 붙일 수 있다.
@Component
개발자가 직접 컨트롤이 가능한 클래스의 경우 사용.
클래스 또는 인터페이스 단위에 붙일 수 있다.