Bean 등록 메타정보 구성 전략

전략1. XML 단독 사용

  • 모든 빈을 명시적으로 XML 등록하는 방법
  • 생성되는 모든 빈을 XML에서 확인할 수 있다는 장점이 있으나 빈의 개수가 많아지면 관리가 어려움
  • 여러 개발자가 같은 설정파일을 공유해서 개발하다 보면 설정파일을 동시에 수정하다 충돌이 날 가능성
  • DI에 필요한 적절한 setter 메서드 또는 생성자가 코드 내에 반드시 존재해야 한다.
  • 개발 중에는 어노테이션 설정방법을 사용했지만 운영중에는 관리의 편의성을 위해 XML 설정으로 변경하는 전략을 사용할 수 있다.

전략2. XML과 빈 스캐닝(Bean Scanning) 의 혼용

  • 빈으로 사용될 클래스에 특별한 어노테이션을 부여해주면 이런 클래스를 자동으로 찾아서 빈 등록
  • 특정 어노테이션이 붙은 클래스를 자동으로 찾아서 bean으로 등록해주는 방식을 빈 스캐닝을 통한 자동인식 빈 기능이라고 한다.
  • 어노테이션을 부여하고 자동스캔으로 빈을 등록하면 xml 생성과 관리에 따른 수고를 덜어주며 개발 속도 향상
  • 애플리케이션에 등록될 빈이 어떤 것들이 있고 빈들간의 의존관계가 어떻게되는지를 한눈에 파악할 수는 없다.

Bean 등록 및 의존관계 설정 Annotation

Bean 등록 Annotation

@Component

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

@Repository

  •  퍼시스턴스 persistence, 레이어, 영속성을 가지는 속성 (파일, DB) 를 가진 클래스

@Service

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

@Controller

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

@Repository, @Service, @Controller 는 더 특정한 유즈케이스에 대한 @Compnent의 구체화된 형태이다.

 


Bean 의존관계 주입 Annotation

@Autowired, @Resource 어노테이션은 의존하는 객체를 자동으로 주입해주는 어노테이션
@Autowired는 타입으로, @Resource는 이름으로 연결한다는 점이 다르다.

 

@Autowired

  • 정밀한 의존관계 주입 (Dependency Injection)이 필요한 경우에 유용하다.
  • @Autowired는 프로퍼티 ,세터 메서드, 생성자, 일반메서드에 적용 가능
  • 의존하는 객체를 주입할 때 주로 Type을 이용하게 된다.
  • @Autowired는 <property> <constructor-arg> 태그와 동일한 역할

@Resource

  • 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용된다.
  • @Resource는 프로퍼티, setter 메서드에 적용 가능하다.
  • 의존하는 객체를 주입할 때 주로 Name을 사용한다.

@Value

  • 단순한 값을 주입할 때 사용되는 어노테이션이다.
  • @Value("Spring")은 <property .. value="Spring" />과 동일한 역할을 한다.

@Qualifier

  • @Quailfier는 @Autowired 어노테이션과 같이 사용되어 진다.
  • @Autowired 는 타입으로 찾아서 주입하므로, 동일한 타입의 빈 객체가 여러 개 존재할 때, 특정 Bean을 찾기 위해서 @Quailfier을 같이 사용해야 한다.

Component Scan을 지원하는 태그

<context:component-scan> 태그

  • @Component를 통해 자동으로 빈을 등록하고, @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정은 XML에 해야한다.
<context:component-scan base-package="myspring.di.annot" />
  • <context:include-filter> 태그와 <context:exclude-filter> 태그를 같이 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시 가능

어노테이션을 사용한 POJO클래스 작성


 

기존 패키지 복사
StringPrinter.java
ConsolePrinter.java
Hello.java / Printer 타입이 String, console 두개이기에 Quailfier 사용


Bean Configulation XML 작성

new -> Spring Bean Configuration File


DI 테스트 클라이언트 수정


프로퍼티(Property) 파일을 이용한 설정 방법

프로퍼티 파일 및 빈 설정파일 작성

value.properties
annot.xml
Hello.java

  • 이름을 사용하므로 @Autowired, @Quailfier 가 아닌 @Resource 어노테이션 사용

DI 테스트 클라이언트 수정

'Back-end > Spring' 카테고리의 다른 글

Spring JDBC 개요  (0) 2021.06.11
사용자 관리 프로젝트  (0) 2021.06.10
DI 애플리케이션 작성(3)  (0) 2021.06.10
DI 애플리케이션 작성(2)  (0) 2021.06.10
DI 애플리케이션 작성(1)  (0) 2021.06.10

+ Recent posts