intellij가 자동 유선 저장소에 대한 유형의 Bean을 찾을 수 없다고 잘못 설명했습니다.


138

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

콩이 없습니까?

여기에 이미지 설명을 입력하십시오

아래에서 볼 수 있듯이 테스트를 통과합니까? 자동 배선이되어야합니까?

여기에 이미지 설명을 입력하십시오


3
IntelliJ는 때때로 잘못된 양의 자동 와이어 오류를 발생시킵니다. 예를 들어 많은 구성이 EnableAutoConfiguration 뒤에 숨겨져있는 Spring Boot 응용 프로그램의 경우입니다. 이에 대한 공개적인 문제가 있습니다. 다른 원인은 스프링 패싯이 잘못 구성되었을 수 있습니다. 이 상황에서 내가하는 일은 일반적으로 검사 심각도를 낮추어 덜 눈에 띄지 않게하는 것입니다.
Bohuslav Burghardt

답변:


177

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

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

지금까지 오류로 인해 많은 방해가된다면 세 가지 주석으로 되돌아갑니다. 그렇지 않으면 테스트가 통과되므로 Intellij를 무시 하십시오.

항상 기억해...

사람은 항상 기계보다 큽니다.


1
이 문제는 최신 버전의 Intellij (2017.1에서 확인)로 해결되었습니다.
Sourabh

45
나는 여전히 2017.2에서 그것을 얻고 있으며 궁극적 인 라이센스에 대한 지불입니다.
토마스 칼라일

1
Spring Cloud Stream 테스트 예제에 따라 2017.2 및 SprintBootTest 외부 클래스 및 SpringBootApplication 정적 내부 클래스로 얻습니다
danebez

4
최신 버전의 IntelliJ (예 : 2017)의 경우 Spring Data 플러그인을 활성화해야하며 위의 해결 방법이 필요하지 않습니다. 아래에 그 방법을 알려주는 또 다른 답변이 있습니다.
Norbert

4
IntelliJ 2018.2에서 Spring Boot 2.0.5를 사용하면 @SpringBootApplication이 오류가 발생했습니다. 나는 scanBasePackages매개 변수를 사용하여 @ Jaõs Matos의 조언을 따르고 @SpringBootApplication스캔해야 할 패키지 / 네임 스페이스를 지정했습니다.
Dave Goodchild

53

@Repository저장소 클래스에 Spring 주석 을 추가하십시오 .

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

@Repository
public interface YourRepository ...
...

확장 Repository클래스 와 함께 스프링 데이터를 사용하면 충돌이 발생합니다. 그런 다음 명시 적 페이지를 표시해야합니다.

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
이에 따라 youtrack.jetbrains.com/issue/IDEA-148113 는 버전 (16)에 고정된다 (호흡 보유)
ismoore999

@Component도 작동하는 것 같습니다. 인터페이스 / 클래스를 강제로 스캔 해야하는 것처럼 보입니다.
Brett

더 이상 @Repository를 추가 할 필요가 없습니다. Spring Data 플러그인에서만.
Shin Kim

3
3 년 후 그것은 다시 생겼습니다
garyM

매퍼 인터페이스 (mybatis)에 / @ Mapper를 사용했습니다. 아이디어는이 경고를 던진다. 경고가 사라진 / @ Repository로 변경했습니다.
bzuo

32

IntelliJ IDEA Ultimate (2016.3.4 빌드 163)의 내 버전이이를 지원하는 것 같습니다. 트릭은 스프링 데이터 플러그인을 활성화해야한다는 것입니다.

여기에 이미지 설명을 입력하십시오


이로 인해 문제가 해결되었습니다. 코드 설정이 올바르게 된 사람에게는 이것이 실제 문제 인 것 같습니다!
Matsu Q.

5
2017 년에는 작동하지 않습니다 .2.7. 플러그인이 활성화되었지만 경고가 여전히 존재합니다.
brainfrozen

iJ Ultimate 2018.2.5에서 나를 위해 일했습니다.
JL_SO

23

@ComponentScan이 구성 요소를 스캔해야하는 위치를 표시해야하는 경우가 있습니다. 패키지를이 주석의 매개 변수로 전달하면됩니다. 예 :

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

그러나 이미 언급했듯이 @SpringBootApplication 주석은 @ComponentScan을 대체하므로 이러한 경우 동일한 작업을 수행해야합니다.

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

적어도 제 경우에는 Intellij가 불평을 중단했습니다.


2
이것은 확실히 더 좋고 깨끗한 솔루션이며 이것이 경고를 제거했음을 확인할 수 있습니다. 감사!
Dave Goodchild

2
제 경우 @SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) 에는 앱이 제대로 작동했지만 intellij는 마음에 들지 않았습니다. @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})나를 위해 고정으로 변경 !
GriffoGoes 20시 42 분

1
IDE간에 이식 가능하고 개발자 의도를 명확하게 전달하기 때문에 이것은 최고의 솔루션입니다.
MusikPolice

궁극적 인 2019.3.1 스프링 부트 2.2.1 및 Java 11.0.4를 사용하고 있습니다. 단위 테스트 파일에 여전히 문제가 있습니다.
garyM

1
@GriffoGoes가 제안한 내용은 멀티 모듈 구조를 사용했기 때문에 내 문제를 해결했습니다.
Juan Monsalve


15

나는 spring-boot 2.0을 사용하고 있으며 intellij 2018.1.1 Ultimate Edition과 같은 문제에 직면했습니다.

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

@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}

13
이것은 또한 "작동"하지만 intellij는 불평 : Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration ¯ \ _ (ツ) _ / ¯
Michael

6

서비스 클래스에서 @Service 주석을 놓쳤는 지 확인하십시오.


5

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");
    }
}

4

IDE를 행복하게 만들기 위해 코드를 변경하지 않으려는 경우. 스프링 패싯에 모든 구성 요소를 추가하여 해결했습니다.

  1. "서비스, 프로세서 및 라우터"이름 또는 원하는 이름으로 그룹을 작성하십시오.
  2. "Spring Application Context"를 제거하고 다시 작성하여 이전에 작성한 그룹을 상위로 사용하십시오.

여기에 이미지 설명을 입력하십시오


4

테스트가 통과 alt + enter되는 한, 커서를 오류 위로 가져 가서 첫 번째 항목의 하위 메뉴 내에서 다음을 Disable Inspection선택하십시오.


감사. 그건 그렇고 IntelliJ 설정의 한보 기에서 기본값이 아닌 모든 변경 사항을 볼 수있는 방법이 있습니까?
powder366

3

Spring Boot 응용 프로그램에서 비슷한 문제가 발생했습니다. 애플리케이션은 Feign (주석이있는 인터페이스의 요청을 합성하는 HTTP 클라이언트)을 사용합니다. 으로 인터페이스에 SomeClient주석이 달린 @FeignClientFeign은이 인터페이스를 구현하는 런타임 프록시 클래스를 생성합니다. 일부 Spring 컴포넌트가 bean 유형의 autowire를 시도하면 실제로 실제 클래스가 프로젝트에 존재하지 않으며 Idea가 주석 을 이해하도록 가르쳐지지 않기 때문에 Idea는 SomeClient유형의 bean을 SomeClient찾지 않습니다 @FeignClient.

솔루션 :로 인터페이스 SomeClient에 주석을 답니다 @Component. (이 경우 직접 @FeignClient주석을 사용하지 않고 주석을 달고 주석 을 추가 SomeClient하는 메타 주석을 사용합니다.)@OurProjectFeignClient@FeignClient@Component


예, @Component인터페이스에 추가 하면 문제가 해결됩니다. 그러나 나는 이것이 올바른 방법이 아니라고 생각합니다 ... 내 의견으로는 이것은 IntelliJ IDEA의 버그이거나 그렇게 어렵지 않습니다 IntelliJ IDEA는 최신 Feign 버전에 대한 준비가되어 있지 않습니다. 그것은 더 @Component잘못된 feign 버전 없이 작동 합니다 ( @FeignClient주석 org.springframework.cloud.netflix.feign대신에 주석이있는 곳 org.springframework.cloud.openfeign-아마도 이것이 문제의 원인입니까?). 이에 대한 추가 세부 정보 (버그 티켓 일 수 있음)를 찾았습니까?
Josef Reichardt

아니, 내 케이스 (없이 작동하지 않음 @Component)는 패키지 @FeignClient에서 나온 것이지만 아닙니다 org.springframework.cloud.netflix.feign.
Tomáš Záluský

3
JetBrains 버그 추적기 문제는 다음과 같습니다. youtrack.jetbrains.com/issue/IDEA-168155
Josef Reichardt


2

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

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

이것은 의미가 있고 나를 위해 트릭을했습니다. 왜 경고를 해제합니까? 경고가 예상대로 작동합니다!
WebComer

2

당신이해야 할 일은 추가

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

나는 당신의 생각 때문에 AppConfiguraion.java의 패키지가 깊은 당신의 주석 구성 요소에 비해 (@Service, @Component ...)의 패키지

와 같은 "package/include/your/annotation/component/deeper/config".


@ComponentScan ( "package.include.your.annotation.component")!
Iakov Senatov

2

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

@ContextConfiguration(classes = {...})

테스트 패키지에만 해당됩니다!
Iakov Senatov

2

IntelliJ v.14에 나타날 때이 주석을 숨기려면이 주석을 사용하고 있습니다.

@SuppressWarnings("SpringJavaAutowiringInspection")

생성자에 자동으로 연결되면@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Loren

2

나를 위해 솔루션은 @EnableAutoConfigurationApplication 클래스에서 @SpringBootApplication중복 때문에 밑줄을 긋는 아래 에 배치 해야했습니다. 그것을 삭제하고 누락 된 콩에 관한 모든 경고가 사라졌습니다! 바보 같은 봄 ...


2

제 경우에는 @Autowired하려고했던 디렉토리가 같은 수준이 아니 었습니다.

동일한 구조 수준에서 설정하면 오류가 사라졌습니다.

그것이 누군가를 도울 수 있기를 바랍니다!


1

스프링 부트 응용 프로그램 에서이 문제에 대한 나의 해결책은 스프링 응용 프로그램 컨텍스트를 열고 누락 된 자동 유선 Bean에 대한 클래스를 수동으로 추가하는 것입니다!

(프로젝트 구조 메뉴 또는 스프링 도구 창을 통해 액세스 ... "봄 애플리케이션 컨텍스트 편집")

따라서 내 ExampleApplication 스프링 구성 만 포함하는 SpringApplicationContext 대신 누락 된 Bean도 포함합니다.

SpringApplicationContext :

  • ExampleApplication.java
  • MissingBeanClass.java

et voilà : 오류 메시지가 사라졌습니다!


1

이것은 최신 IntelliJ에서 여전히 버그로 보이며 가능한 캐싱 문제와 관련이 있습니까?

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


1

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

@ComponentScan
public class PriceWatchTest{

    @Autowired
    private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}

1

방금 @EnableAutoConfiguration을 사용하여 해결해야했지만이 오류는 기능에 영향을 미치지 않았습니다.


1

@EnableAutoConfiguration을 스프링 부트 응용 프로그램 기본 클래스에 배치하면 해결할 수 있습니다.


0

때때로-내 경우에는-그 이유는 잘못된 수입입니다. 실수로 가져 왔습니다

import org.jvnet.hk2.annotations.Service

대신에

import org.springframework.stereotype.Service

Idea의 제안 된 수입품 중 첫 번째 선택을 맹목적으로 받아들임. 처음 일어 났을 때 몇 분이 걸렸습니다. :-)


0

놀랍게도 Eclipse를 성공적으로 실행 한 Feign 지향 프로젝트는 InteliJ에서 실행할 수 없었습니다. 응용 프로그램을 시작할 때 InteliJ는 serviceImpl 계층에 주입하려고 시도한 Feign 클라이언트에 대해 다음과 같이 불평했습니다. 구성에서 '....'유형의 Bean을 정의하십시오.

나는 무엇이 잘못되었는지 이해하려고 오랜 시간을 낭비했다. 완전히 이해하지 못하는 솔루션 (InteliJ 용)을 찾았습니다.

  1. Alt Shift F10 (또는 실행 메뉴)
  2. '구성 수정'을 선택하십시오.
  3. 구성 창에서 '제공된'범위에 종속성 포함 '확인란을 선택하십시오.
  4. 응용 프로그램을 실행

또는 이클립스를 선택하십시오 :)


0

Bean의 패키지가 올바르게 작성되었는지 확인하십시오.

//Check if this is written right 
package com.package1.package2.package3


import ...

@Service
class ServiceX {

  ...

}


0

IDEA에 mybatis 플러그인을 설치하여 문제를 해결했습니다. Mybatis 플러그인을 설치하면 사라졌습니다.


0

간단하게 2 단계를 수행해야합니다

  1. 최대 절전 모드 추가
  2. @Autowired를 @Resource로 변경하십시오.
==>> change @Autowired to  @Resource

답을 설명하십시오.
mentallurg

0

IntelliJ IDEA Ultimate

기본 클래스를 IntelliJ Spring Application Context에 추가하십시오 (예 : Application.java).

File -> Project Structure..

왼쪽 : 프로젝트 설정-> 모듈

오른쪽 : 패키지 구조에서 찾아 Spring추가+ Application.java


UV 응답과 같습니다
Anton Bondarenko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.