프로그래밍

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

캡처.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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
5676 [프로그래밍] 반응형 웹페이지가 내가상상한거랑 좀 다르네 3 평택국 0 21 시간 전 293
5675 [프로그래밍] 고졸 FE개발자 연봉, 상황에 조언좀.. 14 쾅꿍꿍 0 1 일 전 398
5674 [프로그래밍] 물경력들 보면 책임을 이해못하는것같음 5 mils 1 1 일 전 251
5673 [프로그래밍] GPT가 코딩 다해주네 3 겜신병자 0 2 일 전 597
5672 [프로그래밍] 크로스플랫폼의 욕심은 끝이없다 4 ye 0 5 일 전 339
5671 [프로그래밍] 월루중에 백준 풀어보고 있는데, 6 오뜨 0 6 일 전 606
5670 [프로그래밍] 같이 일했던 시니어급 개발자 아예 직무 바꿨네.. 15 흐린눈 2 7 일 전 601
5669 [프로그래밍] 안드로이드 스튜디오가 이상해요... 2 집에가게해줘 0 8 일 전 373
5668 [프로그래밍] 양심고백 5 너가전부옳아 0 9 일 전 350
5667 [프로그래밍] 멀티겜만드는거 첨인데 빡시네 4 아님나 0 9 일 전 403
5666 [프로그래밍] vscode에 이런 설정도 있나? 17 너가전부옳아 0 10 일 전 263
5665 [프로그래밍] 네트워크 관련 관련 질문드립니다 6 그러네요 0 12 일 전 196
5664 [프로그래밍] 언리얼 C++이라고 불리는 이유? 4 nyvux 0 12 일 전 316
5663 [프로그래밍] 코틀린과 swing 기능 관련 다시 질문 4 집에가게해줘 0 13 일 전 149
5662 [프로그래밍] 22대 총선 정보를 모아 볼 수 있는 사이트 2 마포구알짜땅주인 0 13 일 전 300
5661 [프로그래밍] 집에서 공부하는 개붕이 있냐 8 년차html개발자 0 15 일 전 463
5660 [프로그래밍] Mojo 써본사람 있음? 5 너가전부옳아 1 15 일 전 337
5659 [프로그래밍] 코린이 swing 질문좀... 1 집에가게해줘 0 16 일 전 148
5658 [프로그래밍] 파이썬 pillow-avif-plugin 라이브러리 gif->avif 변환 관... 3 부터시작하는이세... 0 16 일 전 121
5657 [프로그래밍] 다들 얼마나 자주 commit 함? 19 너가전부옳아 1 16 일 전 349