JoinPoint 가 값을 가져오지 못함 jointpoint.getArgs()[0] = null jointpoint.getArgs() 가 값을 가져오지 못할 때

Jay_u·2023년 5월 23일
0

버그fix

목록 보기
5/7

AOP 클래스를 활용하면서 joinpoint.getArgs()[0] 가 Map<String, String> 을 가져와야 하는데 null을 갖고 오는 상황이 벌어졌다.

왜 그런걸까? 이유는 @After 어드바이스에 있었다.

@After 어드바이스는 PointCut메소드 실행후에 실행되기 때문에 메소드의 인수를 가져올 수 없는 상황이 나타나기도 한다.

이럴 때 사용하는 어노테이션이 바로 @AfterReturning 이다.

다음은 사용 예시이다.

원래는 이렇게 써져 있었는데


	@SuppressWarnings("unchecked") 
	@After
	public void pointPlus(JoinPoint joinpoint) {
		
		Map<String, String> paraMap = (Map<String, String>) joinpoint.getArgs()[0]; 

		service.pointPlus(paraMap);
	}
	

여기서 @After 어노테이션을 빼고

@AfterReturning(pointcut = "execution(public com.spring..Controller.pointPlus_*(..) )", returning = "paraMap")

추가한다.

"execution(public com.spring..Controller.pointPlus_*(..) )" 이 부분은 메소드의 포인트컷을 정의한 부분이고
returning = "paraMap" 이 부분은 필요한 파라미터의 명칭을 의미한다.

public void pointPlus(JoinPoint joinpoint, Map<String, String> paraMap) 함수 선언 부분에 파라미터를 추가해주면 끝난다.

profile
정확한 정보를 전달할려고 노력합니다.

0개의 댓글