공부/스프링프레임워크

[spring] 빈 등록 메타정보 구성 및 의존관계 설정 어노테이션

ghhong 2021. 11. 11. 09:54

빈 등록 메타정보 구성 전략 1 : XML단독사용

모든 빈을 명시적으로 xml에 등록하는 방법이다.

생성되는 모든 빈을 xml에서 확인 할 수 있다는 장점이 있으나 빈의 개수가 많아지면 xml파이을 관리하기 힘들다.

여러 개발자가 같은 설정파일을 공유해서 개발하면 충돌이 일어날 수 있다.

DI에 필요한 적절한 setter메서드나 constructor가 코드내에 반드시 존재해야 한다.

 

빈 등록 메타정보 구성 전략 2 : XML과 빈 스캐닝(Bean scanning)의 혼용

빈으로 사용될 클래스에 특별한 어노테이션을 부여하면 클래스를 자동으로 찾아서 빈으로 등록한다.

특정 어노테이션이 붙은 클래스를 자동으로 찾아서 빈으로 등록하는 방식을 빈 스캐닝을 통한 자동인식 빈 등록기능이라고 한다.

어놑이션을 부여하고 자동 스캔으로 빈을 등록하면 xml문서 생성과 관리에 따른 수고를 덜어주고 개발 속도를 향상시킬 수 있다.

빈들간의 의존관계를 한눈에 파악할 수 없다는 단점이 있다.

 

빈 등록 및 의존관계 설정 Annotation

1. Bean등록 Annotation

@Component : 컴포넌트를 나타내는 일반적인 스테레오 타입으로 <bean>태그와 동일한 역할

@Repository : persistence레이어, 영속성을 가지는 속성(파일, DB)을 가진 클래스

@Service : 서비스 레이어, 비즈니스 로직을 가진 클래스

@Controller : 프레젠테이션레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는 클래스

=>@Repository, @Service, @Controller @Component의 구체화된 형태이다.

 

2. Bean 의존관계 주입 Annotation

@Autowired :

정밀한 의존관계 주입(DI)에 유용하다.

프로퍼티, setter메서드, 생성자, 일반메서드에 적용이 가능하다.

의존관계를 주입할 때의 기준은 Type이다. (자료형을 기준으로 DI)

<property>, <constructor-arg>태그와 동일한 역할을 한다.

@Resource :

프로퍼티, setter메서드에 적용이 가능하다.

의존관계를 주입할 때의 기준은 Name이다. (클래스이름을 기준으로 DI)

@Value :

단순한 값을 주입할 때 사용되는 어노테이션이다.

@Value(“Spring”)<property … value=”Spring”/>과 동일한 역할을 한다.

@Qualifier :

타입을 찾아서 의존관계를 주입하는 @Autowired에 같이 사용되며, 동일한 타입의 Bean객체가 여러 개 존재할 때 특정 Bean을 찾기 위해 사용한다.

 

Component Scan을 지원하는 태그

@Component를 통해 자동으로 Bean을 등록하고, @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서선언했을 경우에 해당 클래스가 위치한 특정 패키지Scan하기 위한 설정을 XML에 해주어야 한다.

<context:component-scan base-package=”myspring.di.annot>

<context:include-filter>태그와 <context:exclude-filter>태그를 사용하여 자동 스캔에 포함시킬 클래스와 제외시킬 클래스를 명시할 수 있다.