idea使用@Autowired注解爆红原因及解决方法

在使用idea的@Autowired注解注入Mapper文件时,有时会标红,但是不影响项目运行,那么是什么原因呢

原因

先看一下@Autowired源码:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

	/**
	 * Declares whether the annotated dependency is required.
	 * 

Defaults to {@code true}. */ boolean required() default true;

默认值为true说明@Autowired注解必须要注入一个非空的对象,@Autowired注解的包,来自于:

import org.springframework.beans.factory.annotation.Autowired;

@Mapper的包来自于:

import org.apache.ibatis.annotations.Mapper;

总结报错的原因:@Autowired注解需要一个非空的对象,而@Autowired是SpringFramework的,但是它引入的对象是Mybatis的@Mapper注解,而idea不能很好地识别Mybatis的注解,所以idea不能确认当前要注入的对象是否为非NULL对象。

引申:如果把@Autowired注解的默认值设为false也不会报错

解决方案

1).使用@Resource注解,这是一个java注解;
2).在idea的setting里把Autowired中error关了:idea使用@Autowired注解爆红原因及解决方法_第1张图片
3).在mapper层添加上一个SpringFramework的注解,比如@Repository注解:

@Mapper
@Repository
public interface UserMapper {

}

你可能感兴趣的:(个人笔记,java,spring,intellij-idea)