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
를 사용하면 환경 설정이 조금 더 간소화 될 수 있다.