

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



BankStatementFactory에 @ComponentScan Annotation 추가

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

@Bean
public BankStatementAnalyzer bankStatementAnalyzer(BankStatementCSVParser bankStatementCSVParser) {
BankStatementAnalyzer bankStatementAnalyzer = new BankStatementAnalyzer(bankStatementCSVParser);
return bankStatementAnalyzer;
}
으로 코드 수정

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

@Service, @Repository, @ Controller 모두 @Component와 동일함!
@ComponentScan, @Component를 사용하다가 좀 더 직관적인 Annotation으로 변경된 것 뿐이다 🙂


BankStatementAnalyzer.java에 @Service Annotation 추가
빈 구성 정보에 빈으로 등록된다.
아직 BankStatementParser에 의존관계를 주입하지 않았다.

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

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

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

MemberDAO memberDAO = new MemberDAO(); 로 바로 적으면 의존성이 커지는 문제점이 발생한다.
@Autowired를 통해 spring이 알아서 MemberDAO memberDAO; 만 작성해도 new MemberDAO();를 작성한 것과 동일하다.
👀 지금까지는 CSVParser만 Component로 등록하여 사용 중이었는데, TSVParser도 Component로 등록될 경우?

BankStatementTSVParser.java에 @Component Annotation 추가

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


BankStatementCSVParser.java의 @Component("bankStatementParser") 으로 코드 수정
https://prodo-developer.tistory.com/121 참고해서 해결해도 좋을 것 같다.
🤖 Spring bean 구성 정보 설정 방식 3가지
자바 기반의 컨테이너에 빈 등록 및 의존관계 주입
애노테이션 기반으로 컨테이너에 빈 등록 및 의존관계 주입 (@Component, @ComponentScan @Autowired)
XML 기반(스프링 3.1 이전 방식)
이 중에서 Annotation 기반으로 의존관계 주입하는 2번을 최근에 가장 많이 사용한다.
현재까지 Spring Framework부분을 배운 것이고, Spring Boot를 사용하면 환경 설정이 조금 더 간소화 될 수 있다.