Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다.
IoC(제어의 역전, Inversion Of Contoller)에 대한 설명은 전 포스트에서 하였기 때문에 넘어간다.
아무튼 우리가 Spring을 쓰기 전에는 Class를 작성하고 new 연산자를 통해 생성자를 생성하여 조작한 후에 사용했다.
하지만, Spring을 사용한 후 부터는 직접 new 연산자를 사용하여 만드는 객체가 아니라 Spring에 의해 관리를 당하는 자바 객체를 사용한다.
// Spring 사용X
MemberService service = new MemberService();
private Memberservice(){}
public MemberService getMember(){
return service;
}
//Spring 사용O
@Autowired //어노테이션을 통해 자동 주입
MemberService memberService;
그렇다면, Spring Bean을 Spring IoC Container에 등록하는 방법은?
자바에는 Annotation(=@) 이라는 기능이 있다.
Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터(Spring 컨테이너가 객체를 어떻게 생성할 것인지 표현하기 위한)의 일종
메타데이터(MetaData) : 일반적으로 데이터에 관한 구조화된 데이터
Spring 전에 흔히 보던 @Override 또한 Annotation이다.
Spring은 여러 가지의 Annotation을 사용하지만, 그 중 Bean을 등록하기 위해서 쓰는 Annotation은 @Component 이다.
package org.example.practice.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller //(1)
public class MemberController {
@GetMapping("info")
public String info(){
return "info";
}
}
@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 "";
}
@Component(value="example")
public class Example{
public Example() {
System.out.println("ex");
}
}
@Bean
public ArrayList<String> array(){
return new ArrayList<String>();
}
참고 자료