2018년 6월 12일 화요일

패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 42일차(AOP, Argumentresolver)

AOP

종단관심 : 객체란 관련된 정보를 가지고 있다.
횡단관심 : 모든 메소드의 시작 전,후에 로그 처리를 하고싶다.

AOP는 종단관심만으로 처리 할 수 없는 부분을 처리해준다.
용어

  • joinPoint : 적용할 위치(횡단관심) -> 메소드 시작,끝 / Exception / 메소드를 감싸서(위빙)
  • advice : joinPoint에서 실행 할 코드
  • pointcut : 어떤 Advice를 어떤 joinPoint에 적용할지 설정
  • Aspect : joinPoint + advice + pointcut(위빙)
  • target

Argumentresolver

interceptor 다음에 실행된다.
메소드 안에 있는 파라미터의 타입을 지원해주는지 확인하여 값을 알아서 넣어주는 기능을 한다.
Handlermethodargumentresolver를 implements하면 메소드 2개를 오버라이딩 한다.
  • Handlermethodargumentresolver를 구현하는 클래스를 생성 후 설정에서 ArgumentResolvers를 추가한다.
  • supportsParameter 메소드는 지원을 하는지 안하는지 여부를 확인하는 메소드이다.
  • resolveArgument 메소드는 supportsParameter 메소드에서 return값이 true일 때만 실행되며 사용할 Argument를 셋팅하면 다른 클래스 파일에서 Argument를 사용하면 자동으로 값을 넣어준다.
  • 클래스 정보는 메모리에 1번만 올라가기 떄문에 '=='로 비교가 가능하다.
public class LoginUserInfoArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        Class clazz = methodParameter.getParameterType();
        if(clazz == LoginUserInfo.class)
            return true;
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        return loginUserInfo;
    
@SpringBootApplication
public class LoginApplication{

   public static void main(String[] args) {
      SpringApplication.run(LoginApplication.class, args);
   }

   @Override
   public void addArgumentResolvers(List resolvers) {
      resolvers.add(new LoginUserInfoArgumentResolver());
   }

}
Share:

0 개의 댓글:

댓글 쓰기