본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 50일차 (2023-08-01) 자바 프로그래밍_54. IoC 컨테이너 적용하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 8. 1.
## 54. IoC 컨테이너 적용하기

- IoC 컨테이너의 구동 원리와 구현
- 리스너 객체를 IoC 컨테이너로 관리하기

 

ApplicationContext.java

 

ApplicationContext.java

=>

=>

ApplicationContext.java

=>

ApplicationContext.java

=>

ApplicationContext.java

=>

 

ApplicationContext.java

=>

=>

ApplicationContext.java

ㄴ 패키지 멤버 클래스가 아닌 경우 객체 생성 대상에서 제외하도록 함

=>

 

AppConfig.java

ㄴ 해당 코드 잠시 제거해두기

 

ApplicationContext.java

ㄴ 생성자를 호출할 때 넘겨 줄 아규먼트 args 를 준비하도록 함

 

ApplicationContext.java

ㄴ 준비한 아규먼트를 가지고 생성자를 통해 객체를 생성하도록 함

 

ApplicationContext.java

ㄴ 생성된 객체를 컨테이너에 저장하도록 함

 

ApplicationContext.java

ㄴ 어떤 객체가 생성되는지 확인하기 위해 위에 있는 출력문 아래쪽으로 이동시킨 후 수정하기

=>

ApplicationContext.java

=>

ApplicationContext.java

=>

ApplicationContext.java

ㄴ 아규먼트를 담을 컬렉션을 준비함

 

ApplicationContext.java

ㄴ 파라미터 타입에 해당하는 객체를 컨테이너에서 찾도록 함

 

ApplicationContext.java

ㄴ getBean 메서드를  복사하여 붙여넣은 후 제네릭 타입으로 수정

ㄴ Class<T> 타입의 인자를 받으며, 여기서 T는 클래스의 타입 파라미터를 나타냄

ㄴ 메서드 시그니처는 T 타입의 객체를 반환함

=>

=>

ApplicationContext.java

ㄴ 주어진 타입에 해당하는 빈을 beanContainer에서 찾아서 반환하는 역할을 하도록 하는 getBean 메서드 완성

=>

ApplicationContext.java

ㄴ 주어진 타입에 해당하는 빈을 beanContainer에서 찾았다면 "찾았다!" 라는 문구와 해당 obj 값을 출력하여 확인하도록 함

 

ApplicationContext.java

ㄴ 출력값 확인

 

ApplicationContext.java

ㄴ 출력 확인했으므로 출력문들은 모두 제거

 

ApplicationContext.java

 

ApplicationContext.java

ㄴ 생성된 객체 목록을 확인하기 위해 해당 문구 출력 추가

=>

ApplicationContext.java

ㄴ 출력 값 확인

 

ApplicationContext.java

=>

ㄴ 출력 값 확인

 

ApplicationContext.java

ㄴ @Component 라는 이름의 애노테이션을 만들어서 사용할 것을 선언

=>

ㄴ Bean.java 애노테이션 파일을 복사하여 Component 라는 이름의 애노테이션을 생성

=>

Component.java

ㄴ 클래스에 붙일 수 있도록 @Target 에 TYPE 으로 설정해줌

 

ApplicationContext.java

ㄴ @Component 애노테이션이 붙지 않았다면 객체 생성 대상에서 제외하도록 함

=>

 

MySQLBoardDao.java

ㄴ @Component 애노테이션 추가

 

MySQLItemDao.java

ㄴ @Component 애노테이션 추가

=>

 

MySQLMemberDao.java

ㄴ value 값을 memberDao

ㄴ value 는 생략

 

ApplicationContext.java

ㄴ 생성된 객체를 컨테이너에 저장할 때 @Component 애노테이션이 붙은 애노테이션

ㄴ compAnno.value().length() > 0 조건을 사용하여 @Component 애노테이션에 설정된 이름이 있으면 그 이름으로 객체를 저장하고, 설정된 이름이 없으면 클래스의 간단한 이름(getSimpleName())으로 객체를 저장하도록 함

=>

ㄴ MySQLMemberDao 는 @Component 에 value 값을 memberDao 라고 정해줬기 때문에 위와 같이 출력됨을 확인

 

MySQLMemberDao.java

ㄴ value 값 다시 제거

 

AppConfig.java

ㄴ "bitcamp.report.handler" 를 다시 추가

=>

 

MemberAddListener.java

MemberDeleteListener.java

MemberDetailListener.java

MemberListListener.java

MemberUpdateListener.java

 

DispatcherListener.java

ㄴ 해당 코드 제거

 

DispatcherListener.java

ㄴ ApplicationContext 를 저장하도록 필드에 추가

 

DispatcherListener.java

ㄴ 해당 코드 삭제

=>

DispatcherListener.java

ㄴ Map 대신 ApplicationContext 를 이용하도록 함

=>

 

LoginListener.java

ㄴ LoginListener 에도 @Component 애노테이션 추가

=>

 

MemberAddListener.java

ㄴ @Component 애노테이션의 value 값을 "/member/add" 를 추가

 

MemberDeleteListener.java

ㄴ @Component 애노테이션의 value 값을 "/member/Delete" 를 추가

 

MemberDetailListener.java

ㄴ @Component 애노테이션의 value 값을 "/member/Detail" 를 추가

 

MemberListListener.java

ㄴ @Component 애노테이션의 value 값을 "/member/list" 를 추가

 

MemberUpdateListener.java

ㄴ @Component 애노테이션의 value 값을 "/member/update" 를 추가

 

ServerApp.java

ㄴ member/add -> /member/add 이런식으로 모두 변경해주기

 

ServerApp.java

ㄴ member -> /member 형태로 모두 변경

 

ServerApp.java

ㄴ login -> /auth/login 형태로 변경

 

LoginListetner.java

ㄴ @Component 애노테이션의 value 값을 "/auth/login" 를 추가

 

ServerApp.java

ㄴ ApplicationContext 를 이용하도록 필드에 선언

ㄴ DispatcherListener 는 생성자 안에서 객체 생성하도록 함

 

ServerApp.java

ㄴ facadeListener -> iocContainer 로 변경

ㄴ "SqlSessionFactory" -> SqlSessionFactory.class 로 변경

=>

ㄴ 여기까지는 잘 출력됨

=>

ㄴ 0번은 존재하지 않으므로 "해당 번호의 직원이 없습니다!" 라는 문구만 출력되어야 함

=>

MemberDeleteListener.java

ㄴ 오류 해결

 

MemberDao.xml

ㄴ desc ->  asc 로 변경

=>

 

ServerApp.java

ㄴ 메뉴 경로에 ?category=1 과 ?category=2 와 같이 category 도 추가하도록 함

 

Menu.java

ㄴ 테스트

 

Menu.java

 

Menu.java

=>

 

Menu.java

ㄴ main 에서 테스트 했던 if 문 그대로 가져와서 System.out.println -> prompt.setAttribute 로 변경해주기

 

Menu.java

ㄴ 테스트가 끝난 main 은 제거해줌

 

Menu.java

 

BoardListListener.java

=>

BoardListListener.java

ㄴ BoardListListener 의 생성자에서 category 를 설정할 필요 없으므로 제거

 

BoardListListener.java

ㄴ category 를 생성자가 아니라 prompt 를 통해 받도록 함

 

BoardListListener.java

ㄴ @Component 애노테이션을 추가

ㄴ value 값은 "/board/list" 로 설정

 

BoardAddListener.java

ㄴ BoardListListener 와 비슷한 방법으로 위와 같이 수정

 

BoardDeleteListener.java

ㄴ BoardListListener 와 비슷한 방법으로 위와 같이 수정

 

BoardDetailListener.java

ㄴ BoardListListener 와 비슷한 방법으로 위와 같이 수정

 

BoardUpdateListener.java

ㄴ BoardListListener 와 비슷한 방법으로 위와 같이 수정

 

=> itemXxxListener 도 동일한 방법으로 애노테이션 모두 추가해주기