Spring Annotation

Spring Bean을 등록하는데 있어서 2가지 방법이 있다.

  1. 컴포넌트 스캔과 자동 의존관계 설정

  2. 자바 코드로 직접 스트링 빈 등록하기

컴포넌트 스캔과 자동 의존관계 설정

Annotation
설명

@Component

@Component 어노테이션이 있으면, 스프링 빈으로 등록된다.(@ComponentScan에 의해서)

@Controller

스프링 MVC 컨트롤러

@Service

특별한 처리를 하지 않는다. 대신 개발자들이 핵심 비즈니스 계층을 인식하는데 도움이 된다.

@Repository

스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.

@Configuration

스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리

@Autowired

객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아서 주입한다. 스프링이 관리하는 객체에서만 동작 (서비스 간의 연결 선 역할이라고 생각하면 이해하기 쉽다.)

위에서 보이는 @Controller, @Repository, @Service 모두 내부에 @Component 어노테이션이 포함되어 있는 것을 볼 수 있다.

  • @Controller

@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 "";

}
  • @Repository

이렇게 @Component 어노테이션을 보고 스프링 빈으로 등록되는 것을 컴포넌트 스캔이라고 한다.

예제 코드

  • Controller

  • Service

  • Repository

자바 코드로 직접 스트링 빈 등록하기

@Service, @Repository 어노테이션으로 빈을 등록하지 않고 직접 @Bean 어노테이션으로 빈을 등록 할 수 있다.

  • Controller

  • Service

  • Repository

  • Configuration 설정

언제 사용해야할까?

정형화된 Controller, Servcie, Repository는 컴포넌트 스캔을 사용한다.

하지만, 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.

Last updated