2021-05-17

0517 자바 reflection사용해서 view분기

 1. class에서 곧바로 newInstance() 부르는것 -> deprecated되었음

이제부터는 clazz.getDeclaredConstuctor.newInstance()로 부를것.

*) getDeclaredConstuctor와 getConstuctor의 차이: getDeclaredConstuctor는 생성자의 접근제한자레벨에 관련없이 만들어낼수있다. public이 아니어도!!! ( 그래서.. 싱글톤패턴의 허점이 여기에 있는것이다... 모 그렇게까지해서 싱글톤객체를 파내려는 시도가 있을지는 모르겠지만. 이론상으론 가능하다는 것!) 

2. 대략의 프로세스는 이러하다

1) DispatcherServlet 이 init될때, command.properties안의 내용을 읽는다. 이안에는 유저요청 uri(key), 클래스경로(value)로 map형식으로 저장되어있다. 

읽은 내용을 바탕으로, value의 class를 리플렉션 써서 가져온다. 가져온 Object를 새로운 Map 에 uri(key), object(value)로 해서 넣는다. 

2) 실제로 유저에게서 uri요청이 들어오면 -> map 의 key와 대조해서 찾고, object의 메소드 불러서 viewname을 가져온다. 가져온 viewname을 RequestDispatcher가 포워딩해서 처리한다. 

3. 포인트

interface를 이용한 다형성 : 모든 controller는 view를 처리하는 슈퍼클래스를 상속받는다. 그렇게함으로써- 이 메소드만 부르면 viewname을 얻을수있도록. ( 타입변환필요) 그냥 Object클래스로 받으면.. Object에게는 당연히 해당 메소드가 없기 때문에.. 타입 변환을 해서 interface의 메소드를 사용할수있도록 해준다. 

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...