본문 바로가기

SpringFramework Core - I. IoC 컨테이너/11. JSR 330의 표준 어노테이션들 사용하기

11.2. @Named와 @ManagedBean : @Component 어노테이션에 대응하는 표준

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-named

 

 

@Component 대신에 @javax.inject.Named나 javax.annotation.ManagedBean을 사용할 수 있다. 다음 예시를 보자.

import javax.inject.Inject;
import javax.inject.Named;

@Named("movieListener")    // @ManagedBean("movieListener")도 물론 사용가능하다.
public class SimpleMovieLister {

    private MovieFinder movieFinder;
    
    @Inject
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }
    
    // ...
}

컴포넌트의 이름을 특정하지 않고 @Component를 사용하는 일은 매우 흔하다. @Named 역시 비슷하다. 다음 예시를 보자.

import javax.inject.Inject;
import javax.inject.Named;

@Named
public class SimpleMovieLister {

    private MovieFinder movieFinder;
    
    @Inject
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }
    
    // ...
}

@Named나 @ManagedBean을 사용할 때는, 스프링 어노테이션을 사용할 때와 정확히 같은 방법으로 컴포넌트 스캐닝을 사용할 수 있다.

@Configuration
@ComponentScan(basePackages = "org.example")
public class AppConfig {
    // ...
}

※ @Component와 대조적으로, JSR-330의 @Named와 JSR-250의 ManagedBean 어노테이션은 구성이 불가능하다. 커스텀한 컴포넌트 어노테이션들을 만들고 싶다면 스프링의 stereotype 모델을 사용해야만 한다.