어제까지는 MVC에 대한 구동원리를 배웠고
더이상 컨트롤러를 손대지않아도 된다
하지만 이제는 리스너를 손대야 한다
톰캣은 서블릿 객체를 관리하지 일반 객체를 관리하지는 않는다
일반 객체를 관리하는 클래스 역할을 하는게 Spring 프레임 워크이다.
mvc는 서블릿 프레임워크
di는 객체관리를 편하게 해주는 프레임워크
A라는 클래스가 추가 될때 마다 리스너에 등록을 해줘야하는데
리스너는 서블릿인데 서블릿은 객체를 관리역할을 하는 것이 아니다
그러므로 리스너는 객체와 관련된 부분을 관여하지 않고
setter를 찾아 주입을 시켜줄 것이다
결론적으로는 객체를 관리하는 메인을
Dispatcher 서블릿이 리스너를 통해 가져왔다면
이제는 application-context를 통해 가져오게 할 것이다.
1) MVC 프레임워크 컨트롤러 자동화
2) DI 객체 관리 자동화
3) 에노테이션을 이용한 자동화
application-context.properties 파일 생성 1
ApplictionContext.java 생성
properties의 위치를 web.xml에 기록
ContextLoaderListener.java 객체관리하던 코드 삭제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | InitialContext initialContext = new InitialContext(); DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/studydb"); MySqlMemberDao memberDao = new MySqlMemberDao(); memberDao.setDataSource(ds); sc.setAttribute("/auth/login.do", new LogInController().setMemberDao(memberDao)); sc.setAttribute("/auth/logout.do", new LogOutController()); sc.setAttribute("/member/list.do", new MemberListController().setMemberDao(memberDao)); sc.setAttribute("/member/add.do", new MemberAddController().setMemberDao(memberDao)); sc.setAttribute("/member/update.do", new MemberUpdateController().setMemberDao(memberDao)); sc.setAttribute("/member/delete.do", new MemberDeleteController().setMemberDao(memberDao)); | cs |
ContextLoaderListener.java
properties의 위치를 알려줘야 한다.
private으로 생성 했기때문에 밖에서 쓸수 있도록 getter를 제공
실제로 WEB-INF안에 있는데 servlet만 읽을 수 있기 때문에 RealPath를 사용해
전체 주소를 알려줌
ApplicationContext에는 디폴트 생성자 밖에 존재 하지 않아
propertiesPath를 받을 수가 없어 새로운 생성자를 선언
ApplicationContext.java
application-context.properties를 읽어 객체관리.
새로운 생성자를 선언하게 되면 디폴트 생성자가 사라져 직접 선언 해주고
propertiesPath를 받을 수 있드록 생성자 선언.
- 복잡한 값 매핑은 xml 간단한 값 매핑은 properties 코드 자체가 읽어내는게 properties가 편하다 프레임 워크는 xml을 쓴다 하지만 요즘에는 xml보다는 에노테이션을.. [본문으로]
'프로그래밍 > JavaWebProgramming' 카테고리의 다른 글
[Lesson06] properties를 이용한 객체관리 설명 2 (0) | 2016.12.30 |
---|---|
[Lesson06] 리플랙션 API를 이용 (0) | 2016.12.29 |
[Lesson06] 의존성 낮추기 (0) | 2016.12.29 |