Bean이란?

배지원·2022년 10월 20일
0

SPRING

목록 보기
2/4

1. Spring Bean

  • Spring Ioc 컨테이너가 관리하는 자바 객체를 빈이라고 부른다.

    Spring IOC?

    일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 잡업을 했다. 즉, 모든 작업을 사용자가 제어하는 구조였다.
    하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에 맡긴다. 따라서 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다. 즉, 사요자의 제어권을 다른 주체에 넘기는 것을 IOC(제어의 역전)이라고 한다.

  • Spring에서는 기존의 Java Programming에서처럼 new를 입력하여 새로운 객체를 생성하여 사용하지 않고 Spring에 의해 관리당하는 자바 객체를 사용한다. 이렇게 Spring에 의해 생성되고 관리되는 자바 객체를 Bean이라고 하며 Bean으로 선언해줘야 한다.

2. Spring IOC Container에 Bean 등록

1. 자바 어노테이션 사용

  • Bean을 등록하기 위해서는 @Component 어노테이션 을 사용한다.
    @Component 어노테이션이 등록되어 있는 경우에는 Spring이 어노테이션을 확인하고 자체적으로 Bean으로 등록한다.
    다음 코드를 통해 MVC패턴에서 Controller를 예시로 보자면
@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";
    }
}
  • @Controller 이노테이션을 ctrl + 마우스 클릭하여 상세 코드로 이동해 보면
@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 "";

}
  • 이처럼 구성이 되어 있다. 즉, @Controller 이노테이션은 @Component 이노테이션이 있다는 거을 확인할 수 있고 Spring은 해당 Controller를 Bean으로 등록한다.

2. Bean 설정 파일에 직접 등록

  • @Configuration과 @Bean 이노테이션을 이용하여 Bean을 등록할 수 있다.
    @Configuration을 이용하면 Spring Project 에서의 Configuration 역할을 하는 Class를 지정할 수 있다. 해당 File 하위에 Bean 으로 등록하고자 하는 Class에 @Bean 어노테이션을 사용해주면 간단하게 Bean을 등록할 수 있습니다.

자바일 경우

public class Hello {
    HelloController sampleController = new HelloController
}

위와 같이 new를 통해 객체를 생성하여 사용했을 텐데

Spring일 경우

@Configuration
public class HelloConfiguration {
    @Bean
    public HelloController sampleController() {
        return new SampleController;
    }
}
  • @Configuration을 통해 설정파일을 만들고 @Bean을 통해 사용할 객체를 생성하는 메서드를 만들어주면 된다. 이러면 다른 클래스에서는 Spring이 자동으로 DI(의존)을 해줘 사용할 수 있다.

※ 참고 자료 : https://melonicedlatte.com/2021/07/11/232800.html

profile
Web Developer

0개의 댓글