본문 바로가기
Spring

[Spring] 스프링 빈(Bean)이란?

by 드럼치는 코린이 2021. 9. 24.
728x90
반응형

 Spring Bean이란? 

Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다.
우리가 알던 기존의 Java Programming에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성한 후에 사용했었다.
하지만 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의하여 관리당하는 자바 객체를 사용한다.
이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 하고, Spring Framework에서는 Spring Bean을 얻기 위하여 ApplicationContext.getBean()와 같은 메소드를 사용하여 Spring에서 직접 자바 객체를 얻어서 사용하게 된다.

* Application Context는 Bean들을 설정하고 어디에 의존성을 주입할 건지를 정의하는 것을 말한다.


 Spring IoC 컨테이너에 Bean을 설정하는 방법 

Spring IoC 컨테이너에 Bean을 설정하는 방법에는 크게 두 가지로 나뉜다.

1. 자바 어노테이션(Java Annotation)을 사용하는 방법

Java에는 Annotation이라는 기능이 있다. 사전상으로는 주석의 의미이지만 Java에서는 주석 이상의 기능을 가지고 있다. Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종인데, 소스코드에 추가하면 단순 주석의 기능을 하는 것이 아니라 특별한 기능을 사용할 수 있게 된다.

Spring에서는 여러 가지 Annotation을 사용하지만, Bean을 등록하기 위해서는 @Component Annotation을 사용한다.
@Component Annotation이 등록되어 있는 경우에는 Spring이 Annotation을 확인하고 자체적으로 Bean으로 등록한다.

💡 여기서 잠깐! @Component를 확장한 어노테이션을 활용해 Bean 등록이 가능하다.

1.
@Controller
2. @Service
3. @Repository


*@Controller를 예로, Controller.class를 살펴보면 컨트롤러 어노테이션은 컴포넌트 어노테이션의 전문화 역할을 한다고 명시 되있다. ( This annotation serves as a specialization of {@link Component @Component} )

 

Controller.class


예시를 보면, 실제 Spring 프로젝트에서 Controller를 등록할 때에는 아래 예시와 같이 Controller 임을 Spring에게 알려주기 위하여 @Controller Annotation을 사용하는 것을 볼 수 있다.

// HelloController.java
@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";
    }
}


2. Bean 설정 파일에 Bean을 직접 등록하는 방법

@Configuration과 @Bean Annotation을 이용하여 Bean을 등록할 수 있습니다. 아래의 예시와 같이 @Configuration을 이용하면 Spring Project에서의 Configuration 역할을 하는 Class를 지정할 수 있다. 해당 File 하위에 Bean으로 등록하고자 하는 Class에 @Bean Annotation을 사용해주면 간단하게 Bean을 등록할 수 있다.

// Hello.java
@Configuration
public class HelloConfiguration {
    @Bean
    public HelloController sampleController() {
        return new SampleController;
    }
}

 


[ Reference ]

https://it-mesung.tistory.com/28

http://melonicedlatte.com/2021/07/11/232800.html

 

728x90
반응형

댓글