본문 바로가기

Dev.BackEnd/Servlet&JSP

#미니 MVC FrameWork 만들기 네번째 단계, 의존성 주입 자동화

미니 MVC Framework 만들기 네번째 단계,

프로퍼티와 어노테이션을 활용한 의존성 주입 자동화.

문제점 착안,
지금까지, 각 요청에 따른 페이지 컨트롤러를 생성하고, DAO객체를 주입하는 과정을
하드코딩을 통해 해결했다.
그 결과 ContextLoaderListener 클래스가 매우 지저분해졌다.
이를 해결하기 위해 프로퍼티 파일과 어노테이션을 이용하여,
객체를 생성하고 의존성을 주입하는 부분을 자동화할 것이다.


해결방안,
프로퍼티 파일에 설정된 객체와 어노테이션을 통해 설정된 객체를 준비하는 일을 할 ApplicationContext라는 클래스를 만든다.
이 클래스는 ContextLoaderListener에 의해 호출된다.


구체화,
ContextLoaderListener>
웹 애플리케이션이 실행되면서 호출되는 contextInitialized 메소드에서는 propertiesPath를 꺼내고, ApplicationContext 인스턴스를 생성한다.
1
2
3
4
ServletContext sc = event.getServletContext();
 
String propertiesPath = sc.getRealPath(sc.getInitParameter("contextConfigLocation"));
applicationContext = new ApplicationContext(propertiesPath);
cs

ApplicationContext>
이 클래스는 인스턴스화 되는 순간, 여러가지 일을 한다.
1
2
3
4
5
6
7
8
public ApplicationContext(String propertiesPath) throws Exception {
  Properties props = new Properties();
  props.load(new FileReader(propertiesPath));
  
  prepareObjects(props);
  prepareAnnotationObjects();
  injectDependency();
}
cs

1. ContextLoaderListener로부터 전달받은 propertiesPath를 통해 properties파일을 로딩한다.
=> properties props = new Properties( );
2. Tomcat Server로부터 DataSource를 받아온다.
=> prepareObjects
3. MemberDao 객체, PageController 객체 등 필요한 객체들을 생성하여, HashTable에 정리한다.
=> prepareAnnotationObjects
4. MemberDao에 DataSource를 주입하고, PageController에 memberDao를 주입한다.
=> injectDependency





End