[Spring] Phase 9: Spring Container 생성, Spring Bean 설정 방식(2)

진주·2022년 3월 17일
0

Spring

목록 보기
2/29

Phase 9

bankstatement5 복사 붙인 후, 이름 bankstatement6으로 변경하기


🚐 BankStatementFactory.java 코드

BankStatementFactory에 @ComponentScan Annotation 추가

BankStatementCSVParser에 @Component Annotation 추가

@Component Annotation 추가하면, BankStatementCSVParser class를 사용할 수 있게 된다.

  @Bean 
  public BankStatementAnalyzer bankStatementAnalyzer(BankStatementCSVParser bankStatementCSVParser) {

      BankStatementAnalyzer bankStatementAnalyzer = new BankStatementAnalyzer(bankStatementCSVParser);

      return bankStatementAnalyzer;
  }

으로 코드 수정

동일한 실행 결과가 출력된다!


🚕 @Service, @Autowired 사용

@Service, @Repository, @ Controller 모두 @Component와 동일함!

@ComponentScan, @Component를 사용하다가 좀 더 직관적인 Annotation으로 변경된 것 뿐이다 🙂

BankStatementAnalyzer.java에 @Service Annotation 추가

빈 구성 정보에 빈으로 등록된다.

아직 BankStatementParser에 의존관계를 주입하지 않았다.

BankStatementFactory.java 클래스의 모든 코드 주석처리한 뒤,

BankStatementAnalyzer 생성자에 @Autowired Annotation을 추가한다.

MainApplication.java 실행시 동일한 결과가 출력된다.


@Autowired 추가 설명

MemberDAO memberDAO = new MemberDAO(); 로 바로 적으면 의존성이 커지는 문제점이 발생한다.

@Autowired를 통해 spring이 알아서 MemberDAO memberDAO; 만 작성해도 new MemberDAO();를 작성한 것과 동일하다.


🛬 TSVParser도 Component로 등록될 경우?

👀 지금까지는 CSVParser만 Component로 등록하여 사용 중이었는데, TSVParser도 Component로 등록될 경우?

BankStatementTSVParser.java에 @Component Annotation 추가

expected single matching bean but found 2: bankStatementCSVParser,bankStatementTSVParser 문제 발생

✨ Solution

BankStatementCSVParser.java의 @Component("bankStatementParser") 으로 코드 수정

https://prodo-developer.tistory.com/121 참고해서 해결해도 좋을 것 같다.


정리

🤖 Spring bean 구성 정보 설정 방식 3가지

  1. 자바 기반의 컨테이너에 빈 등록 및 의존관계 주입

  2. 애노테이션 기반으로 컨테이너에 빈 등록 및 의존관계 주입 (@Component, @ComponentScan @Autowired)

  3. XML 기반(스프링 3.1 이전 방식)

이 중에서 Annotation 기반으로 의존관계 주입하는 2번을 최근에 가장 많이 사용한다.

현재까지 Spring Framework부분을 배운 것이고, Spring Boot를 사용하면 환경 설정이 조금 더 간소화 될 수 있다.

profile
진주의 코딩일기

0개의 댓글