programing tip

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

itbloger 2020. 9. 8. 07:44
반응형

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


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

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

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


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


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

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

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


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

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

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


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


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

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

파일-> ProjectStructure-> 모듈-> + (가운데 열)-> Spring-> 확인


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


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


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

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

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

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


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


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


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


It seems like the visibility problem - the parent controller doesn't see the Component you are trying to wire.

Try to add

@ComponentScan("path to respective Component") 

to the parent controller.


in my case I was missing to write in 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>

and in the application context file:

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

after add this tags and run maven to rebuild project the autowired error in intellj desapears and the bean icon appears in the left margin: enter image description here


Mine is for not adding @Repository on my CrudRepository interface, the tutorial I was watching didn't add it on STS and it didn't complain.


You should check if you have @Component, @Repository or similar added on the class


I solved that adding a Web facet.


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 {

I've solved this problem this way. In IntelliJ all of your packages should be in a sub package which is the sub package of main/java. For example I've put all of my packages under src/main/java/com.misisol.watchStore/ and spring could find my beans then after.


Inject Bean with @Qualifier solved the problem for me.


I had similar problem. I solved it by unchecking "Process explicitly annotated beans" option (see screenshot below). This option is enabled by default on linux. Now @Service and @Configurations annotations are visible. screenshot


a little late but i hope it helps to someone else.

Make sure to put the @Service on the implementation class for the service

@Service
public class ServiceNameImpl implements ServiceName {

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

}

That's how i fixed the error.

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

반응형