IntelliJ IDEA는 Spring의 @Autowired 주석을 사용할 때 오류를 표시합니다.


102

IntelliJ IDEA는 @Autowired클래스에서 Spring의 주석을 사용할 때 오류를 표시 하지만 클래스는 문제없이 작동합니다.

이 오류 메시지는 다음과 같습니다.

autowired 멤버는 유효한 spring bean (@ Component / @ Service 등)에 정의되어야합니다. less ... (Ctrl + F1) Bean 클래스의 자동 연결 문제를 확인합니다.


5
이 사용하려고 : @SuppressWarnings ( "SpringJavaAutowiringInspection을")
난 - 밥

통합 테스트 클래스에 대해 동일한 오류가 있습니다. @SupressWarnings 주석을 사용하는 것이 좋은 해결책이라고 생각합니다.
Kevin Wittek

Intellij 2016.2는 내 스프링 부트 / 스프링 데이터 프로젝트에서이 작업을 수행합니다. Intellij는 어떤 빈이 존재하는지 확인하기 위해 어떤 파일을보고 있습니까?
Adam

2
@SuppressWarnings ( "SpringJavaAutowiredMembersInspection")을 사용해야했습니다
user672009

3
IntelliJ IDEA 2017.3.1 (Ultimate Edition) 사용@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
lealceldeiro

답변:


31

IntelliJ IDEA 13.1.4에서 동일한 문제가 발생했습니다. Spring 패싯 (File-> Project Structure)을 제거하고 "Detection"만 표시하도록 두어 해결했습니다.


36
그러나 실제로 빈에 주석을다는 것을 잊으면 어떨까요? 경고를받지 않겠습니까?
Cleankod 2015

22

빈이 존재하고 단지 검사 문제라는 것을 알고 있다면 변수 선언 앞에 다음을 추가하십시오.

@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;

때때로 IntelliJ는 빈이 선언 된 경우 (예 : 빈이 조건부로 포함되고 조건 해결이 런타임에 발생하는 경우) 해결할 수 없습니다.


21

억제 경고를 추가하여 수정했습니다.

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....

19

여기에도 같은 오류가 있습니다!

Intellij는 클래스 구현이 @Service 또는 @Component인지 확인할 수 없습니다.

오류에서 경고로 변경하여 해결하십시오 (Alt + Enter 누르기).


18

모든 프로젝트 모듈에서 .iml 파일을 제거하고 파일-> 캐시 무효화 / 다시 시작으로 이동합니다.


9
패싯을 제거하고 경고 또는 유사한 "수정"을 억제하는 것은 논리적이거나 현명하지 않은 것처럼 보였기 때문에이 기회를주었습니다. 하지만 마지막 단계를 똑같이하지 않았습니다. 대신에 나는 나의 삭제 .iml, 파일을에 받는다는 옵션에서 다시 가져 오기로 선택한 pom.xml파일 및했다 ctrl + s를 다시 생성 .iml. 오류가 사라졌습니다.
ChiefTwoPencils


5

나는 같은 문제가 있었다. 각 관련 모듈에 대해 Spring 패싯 (File-> Project Structure)을 추가하여 해결 한 다음 구성 파일을 추가했습니다. 일부 프로젝트 (spring mvc)의 경우 자동으로 감지 된 구성 파일. 그러나 jar 프로젝트의 경우 구성 파일을 수동으로 추가해야했습니다.


4

Spring Bean 정의가 올바른지 확인하십시오. 때로는 응용 프로그램이 제대로 작동하고 IDE에 오류가 표시되고 Spring 패싯이 정의되어 있으면 프로젝트 'iml'파일을 확인하십시오.


또한 application-properties.xml을 확인하십시오. context : component-scan base-package =”com.my.project”줄이 참조하는 서비스의 패키지를 제외하지 않는지 확인하십시오.
I-밥

내 프로젝트의 "bec-job.iml"에 코드를 넣었지만 문제가 여전히 존재합니다. 내 프로젝트에서 파일 이름이 "applicationContext-interface.xml"인 것을 찾을 수 없습니다. 자세히 설명해 주시겠습니까? ?
Vainlyh

빨간색으로 강조 표시된 코드의 @Autowired 부분 바로 위에 @SuppressWarnings ( "SpringJavaAutowiringInspection")을 넣어야합니다. 이런 식으로 IntelliJIdea는 억제 할 경고를 인식합니다.
I-밥

당신은 파일 "응용 프로그램 properties.xml"이 아닌 "ApplicationContext에-interface.xml"를 찾아야합니다
난 - 밥

1
@SuppressWarnings ( "SpringJavaAutowiringInspection")은 나에게 엉뚱한 것처럼 보이지만 작동합니다. 감사합니다.
Minras 2014-04-17

3

File >> Project Structure >> Facets로 이동 한 다음 모든 구성 파일을 Spring Facet에 추가하여 문제를 해결했습니다. 그 후 빈이있는 파일을 탐지하기 시작했고 문제를 분류 할 수있었습니다. 이 확인을 제공하는 IntelliJ는 매우 중요하며 IMHO를 비활성화해서는 안됩니다.


나는 봄을 가능한 패싯으로 보지 않는다. 어떤 버전의 Intellij가 있습니까?
jDub9

2

가시성 문제인 것 같습니다. 상위 컨트롤러가 연결하려는 구성 요소를 볼 수 없습니다.

추가하려고

@ComponentScan("path to respective Component") 

부모 컨트롤러에.


2

IntelliJ Idea (IDE)가 모듈을 검사하는 데 필요한 모든 스프링 구성을 인식하고 있는지 확인하십시오.

아래에서 확인할 수 있습니다.

파일> 프로젝트 구조> 모듈> [오른쪽 패널의 프로젝트 이름]> Spring

때로는 스프링 구성이 종속성 (프로젝트 클래스 경로에있는 jar)에서 온다는 것을 IDE에 명시 적으로 알려야합니다.


1
커뮤니티 에디션에서 사용할 수 있습니까? 아니면 궁극에서만 사용할 수 있습니까?
Archimedes Trajano

1

나는 같은 문제가 있습니다. 내 것은 autowired 참조를 포함하는 bean이 Spring 컴포넌트 (EJB)가 아니었기 때문에 Autowiring을 사용할 수있는 SpringBeanAutowiringInterceptor 인터셉터를 가지고 있기 때문입니다. Intellij는 Autowiring 검사에서 이러한 가능성을 고려하지 않는다고 생각합니다.


1

나도이 문제가 있었다. 이렇게 alt+를 enter영향받는 라인 중 하나를 다시 실행하거나 사용하지 않도록 봄 검사를 요청하는 다음과하면을 고정. 이것은 13.4 업데이트 이후에만 문제가 된 것 같습니다.


1

제 경우에는 web.xml로 작성하지 못했습니다.

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:applicationContext.xml</param-value>
   </context-param>

및 응용 프로그램 컨텍스트 파일에서 :

<context:component-scan base-package=[your package name] />

이 태그를 추가하고 maven을 실행하여 프로젝트를 다시 빌드하면 intellj desapears에서 autowired 오류가 발생하고 빈 아이콘이 왼쪽 여백에 나타납니다. 여기에 이미지 설명 입력


1

내 CrudRepository 인터페이스에 @Repository를 추가하지 않았기 때문에 내가 본 튜토리얼은 STS에 추가하지 않았고 불평하지 않았습니다.




0
eg1:
directorSettings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 
operate:checkout 勾去掉
eg2:
1.impl class add @service
like this:
@Service
public class CityServiceImpl implements CityService{
@Autowired
private CityDao cityDao;

like this
2.dao file class add @Repository
@Repository
public interface CityDao {

0

이 문제를 이렇게 해결했습니다. IntelliJ에서 모든 패키지는 main / java의 하위 패키지 인 하위 패키지에 있어야합니다. 예를 들어 모든 패키지를 src / main / java / com.misisol.watchStore / 아래에 두었고 spring은 그 후에 내 콩을 찾을 수 있습니다.


0

@Qualifier로 Bean을 주입하면 문제가 해결되었습니다.


0

비슷한 문제가있었습니다. "명시 적으로 주석이 달린 빈 처리"옵션을 선택 취소하여 해결했습니다 (아래 스크린 샷 참조). 이 옵션은 Linux에서 기본적으로 활성화됩니다. 이제 @Service 및 @Configurations 주석이 표시됩니다. 스크린 샷


0

조금 늦었지만 다른 사람에게 도움이되기를 바랍니다.

서비스의 구현 클래스에 @Service를 넣어야합니다.

@Service
public class ServiceNameImpl implements ServiceName {

    @Override
    public void method(ObjectType paramName) {
        //CODE
    }

}

그것이 내가 오류를 수정 한 방법입니다.


0

나는 이것이 오래된 질문이라는 것을 알고 있지만이 문제를 해결 한 답을 찾지 못 했으므로 해결책을 제공하겠습니다.

참고 : 문제가 이것 일 수 있다고 생각 했지만 내 문제는 동일한 인터페이스를 두 번 구현하는 것과 관련이 없습니다. 사용하면 @Qualitier문제가 사라지지만 붕대 였고 적절한 해결책이 아니기 때문에 해결하지 못했습니다.

배경

나는 다른 버전의 봄을 거치고 별도의 모듈에 대해서만 업데이트 된 오래된 프로젝트를 유지 관리하는 임무를 맡았으므로 리팩토링이 필요했습니다. 나는 처음에 중복 된 빈 문제를 얻었고, 하나의 빈이 있었음에도 불구하고 OP 문제와 중복 빈 문제 사이의 문제를 앞뒤로 바꾸었다. 중복 빈을 탐색하는 것은 항상 동일한 클래스로 이동했습니다.

문제

주석 도 있는 클래스 에있는 @Repository클래스 에 문제가 있었습니다 . 나는 또한 스프링의 이전 버전에서 원래 접근 방식이라고 생각하는 기본 패키지에서 수행 하는 스프링이 있음을 알았습니다 . 저는 수년에 걸쳐 개발 된 여러 프로젝트에서 사용 된 지원 프로젝트에서 이전 지점과 새 지점의 일부를 가져와 새 지점을 만드는 과정에 있었기 때문에 이러한 믹스 앤 매치가있었습니다. 방법론의.@Autowired@Service@ComponentScanapplication-config.xmlcontext:component-scan

간단한 솔루션

보다 현대적인 사용 접근 방식 @ComponentScan이 이미 구현되었으므로 방금 제거 application-config.xml하고 문제가 해결되었습니다.


0

다음은 나를 위해 일했습니다.

  1. 오류를 제공하는 서비스 (인터페이스)를 구현하는 모든 클래스를 찾습니다.
  2. 각 클래스를 @Service 어노테이션으로 표시하여 비즈니스 로직 클래스로 표시하십시오.
  3. 프로젝트를 다시 빌드하십시오.

0

조금 늦을 수도 있지만 몇 시간을 보내고이 문제를 조사한 후입니다.

최신 버전에서 IntelliJ 2020 @AutoWired는 선택 사항이며 생성자 기반 의존성 주입이 선호된다는 것을 알았습니다.

서비스 및 컨트롤러 클래스에서 @AutoWired 주석을 제거하고 생성자 기반 종속성 주입을 사용하여 문제를 해결했습니다 .

링크 가 도움 이 될 수 있습니다.

행복한 코딩!


0

2019.2.4 버전의 IntelliJ를 사용하여 생성자 기반 종속성 주입을 사용하는 단 하나의 서비스에서만이 문제가 발생했습니다. 서비스 이름 (shift + f6)을 변경 한 다음 git 수준에서 변경 사항을 삭제하는 것이 도움이된다는 것을 알았습니다.

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