Spring Ioc 컨테이너가 관리하는 자바 객체를 빈이라고 부른다.
Spring IOC?
일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 잡업을 했다. 즉, 모든 작업을 사용자가 제어하는 구조였다.
하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에 맡긴다. 따라서 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다. 즉, 사요자의 제어권을 다른 주체에 넘기는 것을 IOC(제어의 역전)이라고 한다.
Spring에서는 기존의 Java Programming에서처럼 new를 입력하여 새로운 객체를 생성하여 사용하지 않고 Spring에 의해 관리당하는 자바 객체를 사용한다. 이렇게 Spring에 의해 생성되고 관리되는 자바 객체를 Bean이라고 하며 Bean으로 선언해줘야 한다.
@Controller
public class HelloController {
// Http Get method 의 /hello 경로로 요청이 들어올 때 처리할 Method를 아래와 같이 @GetMapping Annotation을 사용하여 Mapping을 사용할 수 있습니다.
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "This is data!!");
return "hello";
}
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
자바일 경우
public class Hello {
HelloController sampleController = new HelloController
}
위와 같이 new를 통해 객체를 생성하여 사용했을 텐데
Spring일 경우
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}