프로그래밍

스프링 빈이없다?는거같은데 이건 어딜봐야함..??

캡처.PNG

 

이거 돌리면

 

 

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.kyulspring.web.BoardDAOTest': Unsatisfied dependency expressed through field 'boardDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.kyulspring.web.board.dao.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:396)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:119)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.kyulspring.web.board.dao.BoardDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1651)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1210)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
    ... 28 more

 

 

 

이런 에러 뜸..

boardDAO

 

캡처2.PNG

 

캡처3.PNG

캡처4.PNG

 

 

설명보면서 따라하고 있어서 잘모르긴해..

다른사람도 같은 에러뜨던데..

 

그리고 <property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml" /> 여기에서 /**/이 어떻게 돌아가는거야?

예전에 배웠던거 같은데 기억이 안나네..

 

사실 지금 매퍼라던지 빈만드는것도 여러방법이 있었는데 기억이 안나서

스프링 배울 사이트 없으까

13개의 댓글

에러를 읽자

0
2019.07.19
@용자왕가오가이가

빈을 못찾는거잖아 아이 모르겠다..

/**/ 이것만 알려주면 안대?

0
@샤켓

난 그걸 왜 적었는지 모르겠음

0
2019.07.19
@용자왕가오가이가

mappers 하위폴더의 mapper.xml 전부 포함한다는뜻인듯

네임스페이스 대문자 오타 있던ㄷ ㅔ이거땜에 안댄건가 그래도 안대네

0

Mapper XMLファイルを明示的に読み込む

 

Mapperインタフェースを経由しないで直接SqlSession(SqlSessionTemplate)を使ってSQLを実行する場合は、SQLが定義されているMapper XMLファイルを明示的に読み込む必要があります。

そのような場合は、applicaion.propertiesに以下の定義を追加するだけです。

src/main/resources/applicaion.properties

mybatis.mapper-locations=classpath*:/mybatis/sqls/**/*.xml

カンマ区切りで複数のロケーションを指定することもできますし、

src/main/resources/applicaion.properties

mybatis.mapper-locations[0]=classpath*:/mybatis/sqls/aaa/**/*.xml

mybatis.mapper-locations[1]=classpath*:/mybatis/sqls/bbb/**/*.xml

という感じで指定することもできます。

また、propertiesファイルではなくyamlファイルを使用すると、

src/main/resources/applicaion.yml

mybatis:

mapper-locations:

- classpath*:/mybatis/sqls/aaa/**/*.xml

- classpath*:/mybatis/sqls/bbb/**/*.xml

という記述にすることもできます。

 

이거같은데

0
@용자왕가오가이가

특정 디렉토리 이하 임의 디렉토리 안에 있는 임의xml파일 읽고 싶을때 쓰는거 아님?

0
2019.07.19
@용자왕가오가이가

맞음 이후에 매퍼 추가 했을때 편하다고 하대

0

스프링에서 DI를 하려면 해당 인터페이스를 구현한 클래스가 빈으로 등록되어 있어야하는데,

오류를 보면 빈을 못찾는다고 하니까 root-context.xml에서 boadDaoImpl이 스캔되도록 설정되었는지 확인해보셈.

 

mapper/**/*Mapper.xml은 mapper디렉토리 하위, 모든 디렉토리들 안에 있는, 이름이 Mapper로 끝나는 xml파일들 모두를 나타내는거임.

하나의 xml파일에 모든 쿼리를 때려박아도 상관은 없지만,

시스템이 커져서 양이 많아지면 이게 이떤 쿼리들이 담긴 xml 인지 구분하기 편하게 xml이름과 디렉토리로 분리함.

 

예를들어 개드립 메뉴를 임의로 분류해서

 

mapper/컴퓨터/전체, 잡담, 모바일 ...Mapper.xml

mapper/읽을거리/전체, 기묘한 이야기, 괴담 ...Mapper.xml

mapper/게임/전체, LOL, 배그 ...Mapper.xml

 

대략 이런식으로 구조 잡아놓으면

컴퓨터판 모바일 게시판에서 DB쿼리 오류가 났다 싶으면

mapper/컴퓨터/모바일Mapper.xml에 있는 쿼리들만 확인해보면 되니까 유지보수가 조금 편해짐..

뭐..어짜피 매퍼 id는 중복되면 안되니까

모든 쿼리 id를 꿰차고있으면 분리하는게 의미없는 짓이긴 하지만

나같은 멍청한 개발자를 위한 조그만 배려임 헤헿

0
2019.07.20
@정보처리마법사

지금 밖이라 물어보고 싶은걸 못물어본다ㅠㅠ

루트컨텍스트엔 사실 암것도 건드린거 없음

test패키지?에서 돌리면 저 에러뜨고

본 패키지에서 돌렸을 땐 제대로 나오더라고..

0
2019.07.20
@샤켓

@리파지토리가 자동으로 빈등록해주는거 아니에양?

베이스패키지 설정을 서블릿컨텍스트에 했는데

루트컨텍스트나 데이터소스컨텍스트처럼 contextconfiguration안시켜서 그런가?

서블릿컨텍스트도 넣어봤었던거같은데 아닌가

서블릿컨텍스트 베이스패키지 설정하는 그거 

다른 컨텍스트에서 할라면 

맨위에 스프링프레임워크 무슨 주소 여러개 입력하는거

컨텍스트파일마다 내용이다르던데 뭐 추가해야되는건가

0
@샤켓

루트 컨텍스트 보면 아마 컴포넌트 스캔이란 항목이 있을꺼임.

@repository나, @controller나, @service 등등 클래스에다 어노테이션 붙여놓으면 자동으로 빈 등록 해주는건데,

그걸 특정 패키지 제한적으로 스캔하는 설정도 있어서 확인이 필요해보였음..

근데 테스트에서만 안뜬다는거보면 그거 문제일수도 있겠다.

본 패키지에서의 classpath와, 테스트 패키지에서의 classpath가 다르거든

기존 리소스 경로를 잡아주거나, 테스트 패키지에 테스트 전용 리소스를 따로 작성해주면 될꺼야.

 

나는 스프링 설정을 xml이 아니라 자바로 설정하는걸 선호해서,

contextconfiguration에다 설정클래스.class만 명시해놓음 되니깐 간단함.

고로 자바 설정으로 넘어오셈 ㅋㅋㅋ

0
@샤켓

contextconfiguration는 말그대로 설정파일을 지정해주는거라서

니가 말한 루트컨텍스트는 스프링 설정파일인것 같고,

데이터소스컨텍스트는 데이터베이스 설정파일인것 같거든.

만약 루트컨텍스트에서 필요한 빈이 등록되도록 설정되어 있다면 문제는 없는거지

근데 컴포넌트 스캔하는 설정이 루트, 데이터소스 컨텍스트 2개에 없고,

서블릿컨텍스트에 설정되어있다면 contextconfiguration에 그것도 추가해줘야함~

아니면 루트컨텍스트에다가 설정을 추가하던가

 

테스트 실행할때 contextconfiguration에 명시된 설정파일을 읽어서 실행한다고 생각하고

거기에 명시된 부분에 boardDAOImpl이 빈으로 등록되는 설정이 있는가 우선 체크

그리고 방금전 답글단 내용대로 classpath 경로가 설정파일을 가리키는지 체크

0
2019.07.20
@정보처리마법사

아 몬가 이해가 된거 같은데 직접해봐야 알거같다

해설 정말 고마워영ㅠㅠ

 

서블릿컨텍스트에

 <context:component-scan base-package="com.kyulspring.web" />

이게 써져있는데 이거때문에

서블릿컨텍스트가 포함 안돼있어서 오류뱉는건지 확인해봐야겠다

이따가..

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180557 [컴퓨터] 노트북 가지고다니기 vs 미니컴퓨터 가지고다니기 11 황제건 0 55 분 전 71
180556 [잡담] 아이패드 프로 얼마에 나올거 같음? 4 노보케인 0 2 시간 전 95
180555 [정보] 알리 ssd 2테라 9.6만 3 년차html개발자 0 3 시간 전 258
180554 [잡담] 거북선 -> 레이니로 바꿀까 3 fhana 0 3 시간 전 92
180553 [잡담] 집안에 돌아다니는 물건들 싹 다 파는 중 1 연골어류 0 5 시간 전 169
180552 [모바일] 현시점 아이폰 중고 가성비 뭐가 나음? 13 상한가 1 10 시간 전 357
180551 [프로그래밍] 폰 스크리닝 해 본 사람 있어? 2 무지개빛푸딩 0 11 시간 전 277
180550 [컴퓨터] rx7600 이 가격이면 살 만하죠? 4 죽업 0 12 시간 전 210
180549 [잡담] 사무실에서 사운드바 주워옴 2 빠빠양 0 12 시간 전 193
180548 [견적] 더는 못 짜겠어요.. 1 아랫마을공돌이 0 12 시간 전 146
180547 [컴퓨터] 컴붕이의 추천에 따라 독거미 키보드 결제함 ㅎㅎ 쿠쿠N취킨 0 13 시간 전 134
180546 [견적] 두제품간의 Cpu, 내장 그래픽 둘중 뭐가 나을까요 1 소산스님 0 18 시간 전 191
180545 [컴퓨터] 573d 149달러 어떰? 3 Kalysaar 0 19 시간 전 156
180544 [견적] R리 cpu 구매 질문있습니다 2 꿀탱 0 21 시간 전 133
180543 [모바일] 삼성닷컴 워치6 잘아는사람? 5 걱정좀그만해 0 21 시간 전 163
180542 [컴퓨터] 스마트모니터는 셋톱박스도 연결 가능한거야? 7 뽀삐뽀삐 0 22 시간 전 152
180541 [모바일] 와이파이6 6e 선택 7 뭐사지 0 22 시간 전 128
180540 [컴퓨터] 이거 메인보드와 메모리 호환성이 엄청 중요하네... 18 부터시작하는이세... 0 22 시간 전 165
180539 [프로그래밍] jsp 트리메뉴 만들고있는데 구상한게가능한지 의견좀물어볼께 11 평택국 0 22 시간 전 97
180538 [견적] 견적 받은거 좀 봐줄랭? 4 아랫마을공돌이 0 23 시간 전 91