Spring Argument resolver
platanus |

RequestMappingHandlerAdapter 어노테이션 기반의 컨트롤러, @RequestMapping을 처리하는 HandlerAdapter. RequestMappingHandlerAdapter 동작 방식 ArgumentResolver 어노테이션 기반의 컨트롤러는 다양한 파라미터를 사용할 수 있다. (HttpServletRequest, Model, @RequestParam, @ModelAttribute, @RequestBody) 이것을 처리할 수 있는 것은 ArgumentResolver기반에서 작동하기 때문이다. 원하는 ArgumentResolver를 만들수도 있다. ReturnValueHandler 컨트롤러의 반환 값을 변환 (ModelAndView, ResponseBody, HttpEntity..) HTTP MessageConverter 각 ArgumentResolver들이 HTTP MessageConverter를 사용해 필요한 객체를 생성한다. 각... » read more

JdbcTemplate의 SimpleJdbcInsert Bean 등록에 관하여
platanus |

SimpleJdbcInsert 빈 등록에 대하여 Reference 일단 오류와 상관없이.. SimpleJdbcInsert를 빈으로 만드는건 뭔가 이상한듯 저게 저 Repository에서만 쓸텐데.. 저걸 빈으로 만들어서 얻는 이점이 없음 JDBC 드라이버에서 제공해주는 DB 메타데이터를 사용해서 insert 쿼리 정보로 사용한다던데 왠지 빈으로 등록 시점에 JDBC 연결이 완료되지 않았을수도 있겠다 여튼, Entity 객체에서 리플렉션으로 '타입'정보를 꺼내쓴다면 애초에 dataSource같은게 필요없겠지 (순수 Java 리플렉션만으로 될테니)... » read more

세션을 사용하기 위한 Filter와 Interceptor
platanus |

HttpSession 세션 생성을 자동으로 해주는 객체 기본 사용법 Tracking session 쿠키를 지원하는지 안하는지 서버는 모른다. 그래서 주소에 JSESSIONID를 세션 생성할때 내려 보내는데 이것을 모든 컨트롤러에서 다 파싱을 해야하니 불편하다. 대게는 쿠키지원을 하니까 tracking-modes를 cookie로 변경하면 주소에 JSESSIONID가 사라진다. Session timeout Filter, Interceptor Filter : 서블릿 Interceptor : 스프링 Filter 만약 로그인 여부 체크를 컨트롤러마다 해야... » read more

Spring Web; MVC
platanus |

MVC패턴 Model : 어플리케이션의 정보, 데이터를 의미한다. View : 사용자 인터페이스, 사용자가 보고 사용하는 화면을 의미한다. Controller : 모델과 뷰의 중계 역할. 사용자의 요청을 파악하고 그에 맞는 결과를 응답한다. 스프링 웹 MVC의 구조 요청당 컨트롤러에 매핑되는 서블릿이 각각 존재했다. 중복코드를 방지하고 일관된 관리를 위해 프론트 컨트롤러가 생겼다. Front controller : 프론트 컨트롤러는 컨트롤러 앞에 존재하는... » read more

스프링5; AOP의 실제 #2
platanus |

이전 글 execution 패턴 표현식 execution(public void set*(..)) : 반환형이 void이고, 메소드 이름의 set으로 시작하고 인자가 0개 이상인 메소드를 호출한다. executation(* dto.*.*()) : dto 패키지 탕비에 속한 인자가 없는 모든 메소드를 호출한다. executation(* dto..*.*(..)) : dto 패키지 및 하위 패키지에 있고 인자가 0개 이상인 메소드를 호출한다. execution(Long dto.StudentRepository.getAge(..)) : 반환형이 Long인 StudentRepository 타입의 getAge() 메소드를... » read more

스프링5; AOP의 실제 #1
platanus |

스프링에서 프록시 패턴을 어떻게 적용시키는지 실제로 스프링을 통해 적용해본다. proxy 패턴은 decorator 객체 로도 활용할 수 있다. 기능 추가와 확장에 초점이 맞춰져있다. 짤막한 프록시의 핵심 프록시의 특징은 핵심 기능은 구현하지 않는다는 점이다. 프록시는 핵심 기능을 구현하지 않는 대신 여러 객체에 공통으로 적용할 수 있는 기능을 구현한다. AOP의 기본 핵심은 공통 기능을 삽입하는 것 이다. AOP의... » read more

스프링5; Prototype 범위
platanus |

Prototype 스프링 컨테이너는 기본적으로 bean객체를 생성 할 떄 싱글톤으로 생성한다. 그러나 여러개의 인스턴스가 필요한 경우 prototype으로 scope를 지정하면 된다. 프로토타입 범위 지정 bean설정에서 scope에 속성으로 지정하면 된다. 아래 코드 참고. 그리고 아래 코드를 실행 하면 false가 반환된다. 프로토타입 주의사항 프로토타입 범위를 갖는 bean은 완전한 라이프사이클을 따르지 ㅇ낳는다. 컨테이너 생성시 초기화 작업까지는 하지만 컨테이너 를 소멸하는... » read more

스프링5; Bean 라이프사이클
platanus |

Bean Lifecycle 스프링 컨테이너를 초기화하고 종료할 때는 다음 작업을 수행한다. 컨테이너 초기화 → bean 객체의 생성, 의존 주입, 초기화 컨테이너 종료 → bean 객체의 소멸 초기화와 소멸의 bean 인터페이스 InitializingBean bean객체가 생성 된 뒤 InitializingBean 클래스의 afterPropertiesSet() 메소드가 호출된다. 초기화 직후 필요한 작업이 있다면 이 클래스를 구현하면 된다. DisposableBean bean객체가 소멸할때 close()로 호출하는데 이 호출되는... » read more

스프링5; 컴포넌트 스캔
platanus |

Component scan 자동 주입과 함께 사용하는 추가 기능이 component scan이다. 스프링이 직접 클래스를 검색해서 bean으로 등록해주는 기능이다. bean 설정에 등록하지 않아도 원하는 클래스를 bean으로 등록할 수 있어 component scan을 사용하면 bean 설정 코드가 많이 줄어든다. 컴포넌트 스캔의 등록 1) @Component 으로 스캔 대상 지정 서비스 코드에 붙인다 이렇게 되면 bean이름은 "memberDao"로 자동지정된다. 자동 지정 규칙은... » read more

스프링5; 의존 자동 주입 @Autowired
platanus |

Automatic dependency injection 객체에 붙이는 @Autowired 서비스 코드에서 의존주입 받는 객체에 대해 다음과 같이 선언하면 스프링이 bean객체를 직접 찾아서 할당한다 bean 설정에서 의존 주입부분을 삭제하더라도 직접 넣는다 메소드에 붙이는 @Autowired 메소드에도 역시 붙이는게 가능하다. setter에 붙인다면 좀 더 명확할 것 같다는 생각을 해본다. 마찬가지로 bean 설정에서 의존부분을 지울 수 있다. @Qualifier; 의존 객체의 선택 자동... » read more