ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Error : UnsatisfiedDependencyException, NoSuchBeanDefinitionException
    Framework | Test/Spring 2021. 8. 23. 16:34

    프레젠테이션 레이어와 비즈니스 레이어 통합 과정에서 DAO 클래스 교체 및 AOP 설정 적용 후 비즈니스 컴포넌트 의존성 주입 과정에서 아래와 같은 에러가 발생했다.

     

    이미 동일한 에러 메세지가 몇 번 뜨긴 했는데, 이번에는 통합 및 교체과정에서 내가 누락한 부분이 있어서 기록을 남겨두고자 한다.

     

    [현재 상황]

    더보기

    현재 applicationContext.xml 파일은 src/main/resources에 있고 이때 서버를 구동하면 FileNotFoundException이 발생하는데 이는 ContextLoaderListener가 기본적으로 /WEB-INF/applicationContext.xml 파일을 읽어서 스프링 컨테이너를 구동하기 때문이다.

     

    만약 src/main/resources 폴더에 있는 applicationContext.xml 파일을 WEB-INF 폴더로 복사하면 스프링 컨테이너를 정상적으로 구동할 수 있는데, 이렇게 하면 비즈니스 레이어에 해당하는 스프링 설정파일이 두 곳에 있어서 나중에 관리상 문제가 발생할 수 있다.

     

    따라서 일단 유지보수 과정에서 비즈니스 컴포넌트를 수정하고 테스트를 진행하기 위해서라도 src/main/resources 폴더에 XML 파일을 위치시키는 것이 맞다. 이와 같이 되어야 src/test/java 폴더에 테스트 클라이언트 프로그램도 실행할 수 있기 때문이다.

     

    -> web.xml 파일에 <context-param> 설정을 추가하면, src/main/resources 폴더에 위치한 스프링 설정파일을 ContextLoaderListener 가 읽어 들일 수 있다.

     

    [에러 메세지]

     

    INFO: 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다: [C:\경로(폴더명)\eclipseSpring\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.2.v20210201-0955\jre\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/경로(폴더명)/eclipseSpring//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.2.v20210201-0955/jre/bin/server;C:/경로(폴더명)/eclipseSpring//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.2.v20210201-0955/jre/bin;C:\app\user\product\18.0.0\dbhomeXE\bin;C:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\apache-maven-3.8.1\bin\;C:\Program Files\Git\cmd;C:\Users\user\AppData\Local\Programs\Python\Python39\Scripts\;C:\Users\user\AppData\Local\Programs\Python\Python39\;C:\Users\user\AppData\Local\Microsoft\WindowsApps;C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\Java\jdk-11.0.11\bin;;C:\경로(폴더명)\eclipseSpring;;.]

    8월 23, 2021 3:07:51 오후 org.apache.jasper.servlet.TldScanner scanJars
    INFO: 적어도 하나의 JAR가 TLD들을 찾기 위해 스캔되었으나 아무 것도 찾지 못했습니다. 스캔했으나 TLD가 없는 JAR들의 전체 목록을 보시려면, 로그 레벨을 디버그 레벨로 설정하십시오. 스캔 과정에서 불필요한 JAR들을 건너뛰면, 시스템 시작 시간과 JSP 컴파일 시간을 단축시킬 수 있습니다.

    INFO: Initializing Spring root WebApplicationContext
    INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
    WARN : org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardController': Unsatisfied dependency expressed through field 'boardService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardService': Unsatisfied dependency expressed through field 'boardDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'elena.spring.web.board.impl.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardController': Unsatisfied dependency expressed through field 'boardService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardService': Unsatisfied dependency expressed through field 'boardDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'elena.spring.web.board.impl.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

     

    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardService': Unsatisfied dependency expressed through field 'boardDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'elena.spring.web.board.impl.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

     

    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'elena.spring.web.board.impl.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

     

    SEVERE: Context initialized 이벤트를 [org.springframework.web.context.ContextLoaderListener] 클래스의 인스턴스인 리스너에 전송하는 동안 예외 발생
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardController': Unsatisfied dependency expressed through field 'boardService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardService': Unsatisfied dependency expressed through field 'boardDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'elena.spring.web.board.impl.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

     

    [해결 방법]

     

    원인이 여러가지가 될 수 있으나 나의 경우 BoardDAO 의 클래스에 @Repository 설정을 누락시켜서 에러가 발생했던 것이고 해당 어노테이션을 추가해 주니까 에러가 사라졌다.

     

    - web.xml 이나 applicationContext.xml 의 문제인줄 알았으나 아니었음 ^__^

     

    댓글

Designed by Tistory.