source

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

bestscript 2023. 3. 1. 11:16

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

는 Spring Spring 시 가 표시됨@Autowired클래스에 주석이 있지만 클래스는 문제없이 기능하고 있습니다.

다음은 오류 메시지입니다.

자동 전원 구성원은 유효한 spring bean(@Component/@Service 등)보다 작은 값으로 정의해야 합니다.(Ctrl+F1) 빈 클래스의 자동 배선 문제를 확인합니다.

IntelliJ IDEA 13.1.4에서도 같은 문제가 있었습니다.스프링 패싯(파일->프로젝트 구조)을 삭제하고, 「검출」이라고 표시되도록 해 버렸습니다.

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

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

빈이 존재하고 검사의 문제일 경우 변수 선언 전에 다음 사항을 추가합니다.

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

IntelliJ가 빈이 선언되었는지 여부를 확인할 수 없는 경우가 있습니다.예를 들어 빈이 조건부로 포함되어 런타임에 동적으로 조건 해결이 이루어지는 경우입니다.이 경우 IntelliJ의 정적 코드 분석기에서는 빈을 검출할 수 없는 것 같습니다.

여기서도 같은 에러가 발생!

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

Error에서 Warning(Alt+Enter를 누름)으로 변경하기만 하면 해결됩니다.

모든 프로젝트 모듈에서 .iml 파일을 삭제하고 [File]-> [ Invalidate Caches / Restart ]으로 이동합니다.

파일 -> ProjectStructure -> 모듈 -> + (중앙 열) -> 스프링 -> OK

저도 같은 문제가 있었어요.각 모듈의 Spring 패싯(File-> Project Structure)을 추가하고 구성 파일을 추가하여 해결했습니다.일부 프로젝트(spring mvc)에서는 가 자동으로 검출된 구성 파일입니다.단, jar 프로젝트의 경우 컨피규레이션파일을 수동으로 추가해야 했습니다.

저도 같은 문제가 있어요.

여기에 이미지 설명 입력

그리고 그것을 고치는 적절한 방법은 인텔리주에게 "경고 억제"가 아니라 올바른 봄의 맥락을 찾도록 말하는 것이라고 생각합니다.

즉, File -> ProjectStructure(;;) -> Modules -> (모듈 선택) -> Spring -> ('+'를 클릭하여 컨텍스트 추가) -> OK

여기에 이미지 설명 입력

콘텍스트 파일을 추가합니다.

여기에 이미지 설명 입력

알았어!

여기에 이미지 설명 입력

[파일(File)]> [프로젝트 구조(Project Structure)]> [패킷(Facets)]순서로 이동하여 모든 설정 파일을 Spring Facet에 추가함으로써 문제를 해결.그 후, 콩이 있는 파일을 검출해, 문제를 분류할 수 있었습니다.인텔리J가 이 수표를 주는 것은 매우 가치 있는 일이며 IMHO를 무효화해서는 안 된다.

조금 늦을지도 모르지만, 몇 시간이고 이 문제에 대해 조사를 한 후에요.

최신 버전에서는 IntelliJ 2020 @AutoWired는 옵션이며 컨스트럭터 기반의 디펜덴시 주입이 바람직하다는 것을 알게 되었습니다.

Service and Controller 클래스에서 @AutoWired Annotation을 삭제하고 컨스트럭터 기반의 의존성 주입을 사용하여 문제를 해결했습니다.

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

해피 코딩!

스프링빈의 정의가 올바른지 확인합니다.애플리케이션이 정상적으로 동작하거나 IDE 에러가 표시되는 경우가 있습니다.스프링 패싯이 정의되어 있는 경우는, 프로젝트의 「iml」파일을 확인해 주세요.

가시성 문제인 것 같습니다.- 배선하려는 컴포넌트가 부모 컨트롤러에 인식되지 않습니다.

추가 시도

@ComponentScan("path to respective Component") 

부모 컨트롤러에 접속합니다.

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

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

[ File ] > [ Project Structure ]> [ Modules ]> [ Right Panel ]> [ Spring ]

경우에 따라서는 스프링 구성이 의존 관계(프로젝트 클래스 패스에 존재하는 항아리)에서 비롯되었음을 IDE에 명시적으로 알릴 필요가 있습니다.

저도 같은 문제가 생겼어요.저는 자동배선 레퍼런스가 포함된 콩이 스프링 컴포넌트(EJB)가 아니라 SpringBean을 받았기 때문입니다.자동 배선 인터셉터 인터셉터 자동 배선 사용을 허용합니다.Intelij는 자동 배선 검사에서 이러한 가능성을 받아들이지 않는다고 생각합니다.

저도 이런 문제가 있었어요.+enter를 수행한 다음 영향을 받는 라인에 대한 스프링 검사를 다시 실행하거나 비활성화하도록 요청하면 문제가 해결됩니다.이것은 13.4 업데이트 후에만 문제가 된 것 같습니다.

제 경우 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의 자동배선 오류가 발생하고 왼쪽 여백에 bean 아이콘이 나타납니다.

저는 CrudRepository 인터페이스에 @Repository를 추가하지 않았기 때문에 시청하고 있던 튜토리얼은 STS에 추가되지 않았고 불평도 없었습니다.

클래스에 @Component, @Repository 등이 추가되었는지 확인해야 합니다.

조금 늦었지만 다른 사람에게 도움이 됐으면 좋겠어요.

반드시 @Service를 해당 서비스의 구현 클래스에 배치하십시오.

@Service
public class ServiceNameImpl implements ServiceName {

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

}

그렇게 해서 오류를 수정했습니다.

오래된 질문인 것은 알지만, 이 문제를 해결할 수 있는 답을 찾지 못했기 때문에 해결책을 제시하겠습니다.

주의: 이 문제일 수 있다고 생각했지만, 같은 인터페이스를 2회 실장하는 것은 문제가 아닙니다.사용.@Qualitier문제가 사라지긴 했지만 붕대였고 적절한 해결책이 아니었기 때문에 저는 그것에 만족하지 않았습니다.

배경

스프링의 다른 버전을 거치고 개별 모듈만 업데이트한 오래된 프로젝트를 관리하는 업무를 맡고 있기 때문에 최소한 리팩터링이 필요했습니다.처음에는 복제 콩을 입수하고 있었는데, OP의 문제와 복제 콩의 문제 사이를 왔다 갔다 해서 콩이 1개밖에 없었는데, 복제 콩으로의 이동은 항상 같은 클래스로 진행되었습니다.

문제

에 문제가 발생하였습니다.@Repository였던 클래스@Autowired에 있어서@Service수업도 있었다.@ComponentScan주석입니다.나도 스프링이 있다는 걸 알아챘다application-config.xml그것은 하고 있었다.context:component-scanSpring의 이전 버전에서는 원래 접근 방식이었던 것 같습니다.몇 년 동안 개발된 다른 프로젝트에 사용된 지원 프로젝트에서 오래된 브랜치 및 새로운 브랜치의 일부를 가져와서 새로운 브랜치를 만드는 중이었기 때문에 이러한 방법론이 혼합되어 있었습니다.

심플한 솔루션

보다 현대적인 사용법이 있기 때문에@ComponentScan이미 구현되어 있습니다. 방금 제거했습니다.application-config.xml그 문제는 해결되었다.

다음과 같은 것이 도움이 되었습니다.

  1. 에러를 발생시키고 있는 서비스(인터페이스)를 실장하고 있는 모든 클래스를 검색합니다.
  2. 각 클래스를 @Service 주석으로 표시하여 비즈니스 로직 클래스로 지정합니다.
  3. 프로젝트를 재구축합니다.

나는 그것을 웹패싯을 추가하여 해결했다.

eg1:
director:Settings - 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 {

나는 이 문제를 이런 식으로 해결했다.IntelliJ에서는 모든 패키지가 main/java 서브 패키지인 서브 패키지에 포함되어 있어야 합니다.예를 들어 모든 패키지를 src/main/java/com.misisol 아래에 둡니다.watchStore/ 그리고 봄은 그 후에 내 콩을 찾을 수 있었다.

@Qualifier를 사용한 Inject Bean으로 문제를 해결했습니다.

저도 비슷한 문제가 있었어요."명시적으로 주석이 달린 콩 처리" 옵션을 선택 해제하여 해결했습니다(아래 스크린샷 참조).이 옵션은 리눅스에서 기본적으로 실행됩니다.이제 @Service 및 @Configurations 주석이 표시됩니다.스크린샷

2019.2.4 버전의 IntelliJ에서 컨스트럭터 기반의 의존성이 주입된 서비스는 1개뿐이어서 문제가 발생하였습니다.서비스명(shift+f6)을 변경하여 git레벨에서 변경을 파기하는 것이 도움이 되었습니다.

IDEA를 사용하는 사용자는 알고 있는 경고를 제거할 수 있습니다.

Mac에서는 저주를 빨간색 웨이브 라인으로 이동하고 option+enter(Windows에서는 alt+enter)를 누르면 다음과 같은 제안이 표시됩니다.

여기에 이미지 설명 입력

한번 으로 추가가 자동으로 됩니다.SuppressWarnings

ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ.option+enter★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

언급URL : https://stackoverflow.com/questions/21323309/intellij-idea-shows-errors-when-using-springs-autowired-annotation