익진
28
2019-03-15 21:33:25
2
116

스프링 UnsatisfiedDependencyException 오류 질문드립니다


<bean id="transactionAdvice" class="springbook.user.service.TransactionAdvice">

<property name="transactionManager" ref="transactionManager"/>

</bean>


<bean id="transactionPointcut" class="springbook.user.service.NameMatchClassMethodPointcut">

<property name="mappedClassName" value="*ServiceImpl"/>

<property name="mappedName" value="upgrade*"/>

</bean>


<bean id="transactionAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">

<property name="advice" ref="transactionAdvice"/>

<property name="pointcut" ref="transactionPointcut"/>

</bean>

어드바이져부분이 활성화되어있으면 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springbook.user.service.UserServiceTest': Unsatisfied dependency expressed through field 'userServiceImpl'; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'userService' is expected to be of type 'springbook.user.service.UserServiceImpl' but was actually of type 'com.sun.proxy.$Proxy16'
오류가 뜹니다

어드바이스 부분은
public class TransactionAdvice implements org.aopalliance.intercept.MethodInterceptor {
  PlatformTransactionManager transactionManager;

  public void setTransactionManager(PlatformTransactionManager transactionManager) {
    this.transactionManager = transactionManager;
  }

  @Override
  public Object invoke(org.aopalliance.intercept.MethodInvocation invocation) throws Throwable {
    TransactionStatus status =
        this.transactionManager.getTransaction(new DefaultTransactionDefinition());

    try {
      Object ret = invocation.proceed();
      this.transactionManager.commit(status);
      return ret;
    } catch (RuntimeException e) {
      this.transactionManager.rollback(status);
      throw e;
    }
  }
}


포인트컷부분은
public class NameMatchClassMethodPointcut extends NameMatchMethodPointcut {

  public void setMappedClassName(String mappedClassName) {
    this.setClassFilter(new SimpleClassFilter(mappedClassName));
  }

  static class SimpleClassFilter implements ClassFilter {
    String mappedName;

    private SimpleClassFilter(String mappedName) {
      this.mappedName = mappedName;
    }

    public boolean matches(Class<?> clazz) {
      return PatternMatchUtils.simpleMatch(mappedName, clazz.getSimpleName());
    }
  }


}
토비스프링 예제진행중에 여기서 막혀서 이렇게 질문드립니다...
매번 막혀도 질문은 안하고 검색으로 해결했는데 이부분은 벌써 3일째라 
이렇게 질문을 올립니다

이렇게 딱 문제던지고 답 좀 달라 는 글을 싫어한다 들었습니다
검색해본결과로는 
레파스토리어노테이션이나 빈어노테이션을 선언안해서 뜨는경우가 있는거같더군요

그래서 이곳저곳에 해봤지만 계속 똑같은 오류가 발생합니다
혹시
이에러가 뜨는 이유가 무엇인지 알려주실분 계신가요



0
0
  • 답변 2

  • vernum
    935
    2019-03-15 21:52:31

    github 공개 가능한가요?

    0
  • 익진
    28
    2019-03-15 21:58:32

    흑흐규ㅠㅠㅠ 저는 아직 멀었나봅니다

    3일만에 이유를 알아냈습니다 ㅠㅠ

    예제를 진행하면서 지웠어야할걸 안지워서 빈을 찾지 못한거엿네요 ㅠㅠ 답글달아주신 vernum님 

    제 질문에 관심가져주셔서 감사합니당 

    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.