Spring AOP 로 인해@Autowired 의존 주입 실패 해결 방법

질문 발견:
이전에 springAOP 로 조작 로그 기록 을 만 들 었 는데 이번 에는 다른 종류 에 사용 할 때 service 가 계속 주입 에 실 패 했 고 인터넷 에서 많은 내용 을 찾 았 는데 모두 비슷 한 상황 이 발생 했 지만 자신의 상황 과 맞지 않 는 다 는 것 을 알 게 되 었 다.나중에 자신의 상황 을 정리 한 결과 방법 은 private 로 수식 한 것 으로 AOP 가 적당 할 때 service 주입 에 실 패 를 초래 할 수 있 고 같은 service 는 다른 Public 방법 에서 이런 상황 이 없 으 며 매우 기괴 하 다.
해결 과정:
찾 아 본 자 료 를 결합 하여 분석 했다.org.springframework.aop.support.aopUtils 에서:

public static boolean canApply(Pointcut pc, Class targetClass, boolean hasIntroductions) { 
 if (!pc.getClassFilter().matches(targetClass)) { 
  return false; 
 } 
 
 MethodMatcher methodMatcher = pc.getMethodMatcher(); 
 IntroductionAwareMethodMatcher introductionAwareMethodMatcher = null; 
 if (methodMatcher instanceof IntroductionAwareMethodMatcher) { 
  introductionAwareMethodMatcher = (IntroductionAwareMethodMatcher) methodMatcher; 
 } 
 
 Set classes = new HashSet(ClassUtils.getAllInterfacesForClassAsSet(targetClass)); 
 classes.add(targetClass); 
 for (Iterator it = classes.iterator(); it.hasNext();) { 
  Class clazz = (Class) it.next(); 
  Method[] methods = clazz.getMethods(); 
  for (int j = 0; j < methods.length; j++) { 
   if ((introductionAwareMethodMatcher != null && 
     introductionAwareMethodMatcher.matches(methods[j], targetClass, hasIntroductions)) || 
     methodMatcher.matches(methods[j], targetClass)) { 
    return true; 
   } 
  } 
 } 
 
 return false; 
}
이곳Method[] methods = clazz.getMethods();은 Public 방법 만 받 을 수 있 습 니 다.execution(* *(..)) public/protected 와 일치 할 수 있 습 니 다.Public 가 일치 하 는 것 이 있 기 때문에 목표 류 는 대 리 됩 니 다.그리고 접점 매 칭 을 할 때 도 일치 할 수 있 습 니 다.또한 cglib 방식 은 가방 등급/protected 방법 을 얻 을 수 있 고 가방 등급/protected 방법 은 직접 반사 로 호출 할 수 있 습 니 다. 
private 수정자 의 접점 은Method[] methods = clazz.getMethods(); 여기 있 는 어떤 것 도 일치 하지 않 기 때문에 대리 할 수 없습니다.그래서 private 방법 이 대리 되 지 않 아@Autowired 가 주입 되 지 않 을 수 있 습 니 다.
수정 방법:
     1.방법 장식 부 호 를 Public 로 변경 합 니 다.
     2.AspectJ 를 사용 하여 주입 한다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기