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());
}
}