복붙노트

[SPRING] intellij가 autowired 저장소에 대해 발견 된 유형의 빈을 잘못 말함

SPRING

intellij가 autowired 저장소에 대해 발견 된 유형의 빈을 잘못 말함

간단한 단위 테스트를 만들었지 만 IntelliJ에서 잘못 빨간색으로 강조 표시했습니다. 오류로 표시

콩?

아래에서 볼 수 있듯이 테스트를 통과합니까? 그래서 Autowired 여야합니까?

해결법

  1. ==============================

    1.@SpringBootApplication 주석을 사용하여 Spring Boot 응용 프로그램을 만들 때 이와 동일한 문제가 발생했습니다. 이 주석은 스프링 참조에 따라 @Configuration, @EnableAutoConfiguration 및 @ComponentScan을 나타냅니다.

    @SpringBootApplication 주석을 사용하여 Spring Boot 응용 프로그램을 만들 때 이와 동일한 문제가 발생했습니다. 이 주석은 스프링 참조에 따라 @Configuration, @EnableAutoConfiguration 및 @ComponentScan을 나타냅니다.

    예상대로 새 주석이 제대로 작동하고 응용 프로그램이 원활하게 실행되었지만 Intellij는 불완전한 @Autowire 종속성에 대해 계속 불평했습니다. @Configuration, @EnableAutoConfiguration 및 @ComponentScan을 별도로 사용하자마자 오류가 중지되었습니다. Intellij 14.0.3 (그리고 이전 버전에서도 가능)은 아직 @SpringBootApplication 주석을 인식하도록 구성되지 않은 것 같습니다.

    현재로서는 오류로 인해 많은 어려움이 발생하면 세 가지 별도의 주석으로 되돌아갑니다. 그렇지 않으면 Intellij를 무시합니다 ... 테스트가 통과했기 때문에 종속성 분석이 올바르게 구성되었습니다.

    항상 기억해...

  2. ==============================

    2.저장소 클래스에 Spring 어노테이션 @Repository를 추가하십시오.

    저장소 클래스에 Spring 어노테이션 @Repository를 추가하십시오.

    이 주석이 없으면 작동해야한다는 것을 알고 있습니다. 그러나 이것을 추가하면 IntelliJ는 오류를 표시하지 않습니다.

    @Repository
    public interface YourRepository ...
    ...
    

    Repository 클래스를 확장하여 Spring Data를 사용하면 충돌 데이터가 발생합니다. 그런 다음 당신은 명확성을 표시해야합니다.

    import org.springframework.data.repository.Repository;
    ...
    
    @org.springframework.stereotype.Repository
    public interface YourRepository extends Repository<YourClass, Long> {
        ...
    }
    

    그리고 나서 오류없이 저장소를 자동으로 실행할 수 있습니다.

    @Autowired
    YourRepository yourRepository;
    

    그것은 아마도 좋은 해결책이 아닙니다 (나는 당신이 저장소를 두 번 등록하려고 노력하고있는 것 같습니다). 그러나 저를 위해 일하고 오류를 나타내지 마십시오.

    어쩌면 IntelliJ의 새 버전에서 수정 될 수 있습니다 : https://youtrack.jetbrains.com/issue/IDEA-137023

  3. ==============================

    3.내 버전의 IntelliJ IDEA Ultimate (2016.3.4 Build 163)이이를 지원하는 것으로 보입니다. 그 트릭은 Spring Data 플러그인을 활성화해야한다는 것입니다.

    내 버전의 IntelliJ IDEA Ultimate (2016.3.4 Build 163)이이를 지원하는 것으로 보입니다. 그 트릭은 Spring Data 플러그인을 활성화해야한다는 것입니다.

  4. ==============================

    4.나는 항상이 문제를 다음과 같이 해결한다. 설정> 검사> Spring Core> 코드에서 오류에서 심각도 옵션으로 변경하는 것보다

    나는 항상이 문제를 다음과 같이 해결한다. 설정> 검사> Spring Core> 코드에서 오류에서 심각도 옵션으로 변경하는 것보다

  5. ==============================

    5.때때로 @ComponentScan이 구성 요소를 검색 할 위치를 지정해야합니다. 이 주석의 매개 변수로 패키지를 전달하면됩니다 (예 :

    때때로 @ComponentScan이 구성 요소를 검색 할 위치를 지정해야합니다. 이 주석의 매개 변수로 패키지를 전달하면됩니다 (예 :

    @ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
    

    그러나 이미 언급 한 바와 같이 @SpringBootApplication 주석은 @ComponentScan을 대체하므로 이와 같은 경우 반드시 수행해야합니다.

    @SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
    

    적어도 제 경우에는 인텔리가 불평을 멈추었습니다.

  6. ==============================

    6.나는 spring-boot 2.0과 intellij 2018.1.1 궁극적 인 판을 사용하고 있으며 나는 똑같은 문제에 직면했다.

    나는 spring-boot 2.0과 intellij 2018.1.1 궁극적 인 판을 사용하고 있으며 나는 똑같은 문제에 직면했다.

    @EnableAutoConfiguration을 주 응용 프로그램 클래스에 배치하여 해결했습니다.

    @SpringBootApplication
    @EnableAutoConfiguration
    class App{
    /**/
    }
    
  7. ==============================

    7.Bean 설정 파일에 @Component 또는 @configuration을 두는 것은 작동하는 것처럼 보입니다.

    Bean 설정 파일에 @Component 또는 @configuration을 두는 것은 작동하는 것처럼 보입니다.

    @Configuration
    public class MyApplicationContext {
        @Bean
        public DirectoryScanner scanner() {
            return new WatchServiceDirectoryScanner("/tmp/myDir");
        }
    }
    
    @Component
    public class MyApplicationContext {
        @Bean
        public DirectoryScanner scanner() {
            return new WatchServiceDirectoryScanner("/tmp/myDir");
        }
    }
    
  8. ==============================

    8.코드를 변경하고 싶지 않으면 IDE를 행복하게 만드십시오. 모든 요소를 ​​Spring 패싯에 추가하여 해결했습니다.

    코드를 변경하고 싶지 않으면 IDE를 행복하게 만드십시오. 모든 요소를 ​​Spring 패싯에 추가하여 해결했습니다.

  9. ==============================

    9.검사가 통과하는 동안 오류가 발생하면 alt + Enter를 누릅니다. 첫 번째 항목의 하위 메뉴에서 검사 사용 안 함을 선택합니다.

    검사가 통과하는 동안 오류가 발생하면 alt + Enter를 누릅니다. 첫 번째 항목의 하위 메뉴에서 검사 사용 안 함을 선택합니다.

  10. ==============================

    10.그리고 마지막으로 중요한 정보 하나 - ComponentScan을 추가하여 앱이 연결해야 할 것들을 알고 있도록합니다. 이 질문의 경우에는 관련이 없습니다. 그러나 @autowiring이 전혀 수행되지 않으면 이것이 해결책 일 것입니다.

    그리고 마지막으로 중요한 정보 하나 - ComponentScan을 추가하여 앱이 연결해야 할 것들을 알고 있도록합니다. 이 질문의 경우에는 관련이 없습니다. 그러나 @autowiring이 전혀 수행되지 않으면 이것이 해결책 일 것입니다.

    @Configuration
    @ComponentScan(basePackages = {
        "some_package",
    })
    public class someService {
    
  11. ==============================

    11.당신이해야 할 일은

    당신이해야 할 일은

    AppConfiguration.java의 @ComponentScan ( "package / include / your / annotation / component").

    AppConfiguraion.java의 패키지가 주석 구성 요소 (@Service, @Component ...)의 패키지보다 더 깊다고 생각하기 때문에,

    예를 들어 "package / include / your / annotation / component / deeper / config"와 같이 입력하십시오.

  12. ==============================

    12.내 응용 프로그램에서 비슷한 문제가 발생했습니다. 주석을 추가 할 때 잘못된 강조 표시가 사라졌습니다.

    내 응용 프로그램에서 비슷한 문제가 발생했습니다. 주석을 추가 할 때 잘못된 강조 표시가 사라졌습니다.

    @ContextConfiguration(classes = {...})
    
  13. ==============================

    13.Spring Boot 애플리케이션에서 비슷한 문제가 발생했습니다. 이 응용 프로그램은 Feign (주석 첨부 인터페이스의 HTTP 클라이언트 합성 요청)을 사용합니다. @FeignClient로 주석 된 SomeClient 인터페이스를 가지면서, Feign은이 인터페이스를 구현하는 런타임 프록시 클래스를 생성합니다. 일부 Spring 구성 요소가 SomeClient 유형의 Bean을 자동 작성하려고 시도하면 Idea는 실제 클래스가 프로젝트에 실제로 존재하지 않으므로 SomeClient 유형의 Bean을 사용하지 않으며 Idea는 @FeignClient 주석을 이해하는 법을 배우지 않습니다.

    Spring Boot 애플리케이션에서 비슷한 문제가 발생했습니다. 이 응용 프로그램은 Feign (주석 첨부 인터페이스의 HTTP 클라이언트 합성 요청)을 사용합니다. @FeignClient로 주석 된 SomeClient 인터페이스를 가지면서, Feign은이 인터페이스를 구현하는 런타임 프록시 클래스를 생성합니다. 일부 Spring 구성 요소가 SomeClient 유형의 Bean을 자동 작성하려고 시도하면 Idea는 실제 클래스가 프로젝트에 실제로 존재하지 않으므로 SomeClient 유형의 Bean을 사용하지 않으며 Idea는 @FeignClient 주석을 이해하는 법을 배우지 않습니다.

    해결책 : SomeClient 인터페이스에 @Component 주석을 붙입니다. (우리의 경우 우리는 SomeClient에서 @FeignClient 주석을 직접 사용하지 않고, @FeignClient로 주석 된 @OurProjectFeignClient라는 metaannotation을 사용하고 @Component 주석을 추가하면됩니다.)

  14. ==============================

    14.이것은 여전히 ​​최신 IntelliJ의 버그 인 것 같으며 가능한 캐싱 문제와 관련이 있습니까?

    이것은 여전히 ​​최신 IntelliJ의 버그 인 것 같으며 가능한 캐싱 문제와 관련이 있습니까?

    위에서 언급 한 mk321과 같이 @Repository 주석을 추가하고 주석을 제거한 다음 다시 저장하면 문제가 해결됩니다.

  15. ==============================

    15.이 주석을 사용하여 IntelliJ v.14에 나타날 때이 오류를 숨 깁니다.

    이 주석을 사용하여 IntelliJ v.14에 나타날 때이 오류를 숨 깁니다.

    @SuppressWarnings("SpringJavaAutowiringInspection")
    
  16. ==============================

    16.이 작업을하기 위해해야 ​​할 일은 다음 코드입니다 :

    이 작업을하기 위해해야 ​​할 일은 다음 코드입니다 :

    @ComponentScan
    public class PriceWatchTest{
    
        @Autowired
        private PriceWatchJpaRepository priceWatchJpaRepository;
    ...
    ...
    }
    
  17. ==============================

    17.내 봄 부팅 응용 프로그램에서이 문제에 대한 나의 해결책은 스프링 응용 프로그램 컨텍스트를 열고 누락 된 autowired 빈에 대한 클래스를 수동으로 추가하는 것이 었습니다!

    내 봄 부팅 응용 프로그램에서이 문제에 대한 나의 해결책은 스프링 응용 프로그램 컨텍스트를 열고 누락 된 autowired 빈에 대한 클래스를 수동으로 추가하는 것이 었습니다!

    (프로젝트 구조 메뉴 또는 스프링 툴 윈도우를 통한 액세스 ... "스프링 어플리케이션 컨텍스트"편집)

    따라서 SpringApplicationContext 대신 SpringApplication Spring 구성이 포함되어있어 Bean이 누락되었습니다.

    Spring ApplicationContext :

    그리고 여기 있습니다 : 오류 메시지가 사라졌습니다!

  18. ==============================

    18.때로는 - 내 경우 엔 그 이유가 잘못된 가져 오기입니다. 나는 실수로 수입했다.

    때로는 - 내 경우 엔 그 이유가 잘못된 가져 오기입니다. 나는 실수로 수입했다.

    import org.jvnet.hk2.annotations.Service
    

    대신에

    import org.springframework.stereotype.Service
    

    맹목적으로 아이디어의 제안 수입에서 첫 번째 선택을 수락하여. 처음 몇 분이 지났을 때 :-)

  19. ==============================

    19.@EnableAutoConfiguration을 사용하여이를 처리해야했지만이 오류는 기능상의 영향을 미치지 않았습니다.

    @EnableAutoConfiguration을 사용하여이를 처리해야했지만이 오류는 기능상의 영향을 미치지 않았습니다.

  20. ==============================

    20.@EnableAutoConfiguration을 스프링 부트 애플리케이션 메인 클래스에 배치하면 해결할 수 있습니다.

    @EnableAutoConfiguration을 스프링 부트 애플리케이션 메인 클래스에 배치하면 해결할 수 있습니다.

  21. ==============================

    21.이 문제도 발생하여 스프링 패싯을 제거하여 해결했습니다.

    이 문제도 발생하여 스프링 패싯을 제거하여 해결했습니다.

    행운을 빕니다!

  22. from https://stackoverflow.com/questions/26889970/intellij-incorrectly-saying-no-beans-of-type-found-for-autowired-repository by cc-by-sa and MIT license