[spring] mapper에 @autowried 설정시 Could not autowire. mapper 해결법. 그외

최대 1 분 소요

mapper에 @autowried 설정시 Could not autowire. mapper 원인

  • UserMapper가 저 시점에 빈으로 등록이 안돼있어서 컴파일타임에 빈이 없다고 IDE가 알려준다.
  • 이건 어디까지나 IDE가 해주는거라서 실제로 돌리면 컴파일은 잘되고 빈 주입시점엔 빈이 존재하기때문에 문제없이 돌아간다.

해결법

  • interface를 정적인 시점에 빈등록을 해주면 저게 사라지긴합니다.(mapper 인터페이스 클래스 위에 @Repository 어노테이션 붙이기)

  • 다른방법으로는 @Autowired로 주입받지말고 생성자로 주입받으면 안뜬다.
  • 스프링4.3에서부터 @Autowired가 없어도 생성자가 1개뿐이라면 알아서 빈을 주입해주는데, 이경우엔 애노테이션이 안붙어있으니 IDE가 스프링빈을 주입하려는건지 알수가없어서 딱히 저런내용을 띄우진않는다.



컴파일 실행시 Could not resolve type alias ‘StudyBoards’. Cause: java.lang.ClassNotFoundException: Cannot find class: StudyBoards 해결법

  • mybatis 맵핑파일.xml에 설정된 SQL 속성에서 파라미터 혹은 resulttype = 에서 경로를 못찾아서 발생하는 오류
  • resultType = 에 VO객체 클래스 이름을 적는 줄 알았는데, Alaias 별칭을 적어야 되는 것이었다.

해결법 3개

  • 속성에 해당 클래스파일 경로를 일일히 지정해준다. 예시) com.org.VO클래스파일 이름

  • 아니면 mybatis-config.xml 파일에서 별칭을 설정하고 맵핑파일.xml 에서 매칭되는지 확인한다.
  • class 파일 단위로 alias 설정시는 mybatis.config 에서 별칭 생성할수 있고, 패키지 단위에서는 <package> 패키지파일경로 </package> 설정하고, 해당 VO객체에 @Alais 어노테이션으로 별칭 생성