IDEAエラーCould not autowire.No beans of'XXXXXX'type found

2927 ワード

1.問題の説明
  IDEAでSpringの注記@Autowiredを使用すると、プログラムは正常に動作しますが、ideaの赤エラーCould not autowire. No beans of 'UserMapper' type foundが表示されます.
2.重要な前提
プログラムが正常に実行され、エラーがないことを示します.beanは実際に存在します.
3.私が出会った2つのシーン(研究が深くなく、他のシーンは保証できない)
3.1 Mybatisを使用して、@Service注記のクラスに@AutowiredでMapperクラスをインポート
Applicationクラスに@EnableAutoConfiguration注釈を追加する別の解決策があります.@Autowiredは確かに間違っていませんが、@EnableAutoConfiguration注釈が重複していることを示しています.@SpringBootApplicationには@EnableAutoConfigurationが含まれているためです.
3.2 redisのconfigファイルは共通モジュールcommonに配置する
  複数のマイクロサービスA、B、C、D…などがあり、いずれもredisを使用し、同じプロファイルを使用しますが、異なるredisサービスに接続するため、RedisTemplateのBeanをcommonモジュールに配置し、他のすべてのモジュールで使用できるようにし、各モジュールで独自のLettuceConnectionFactoryを定義します.以下の通りです
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import javax.annotation.Resource;

@Configuration
public class RedisConfig {

    /**
     *      bean:LettuceConnectionFactory,        
     */
    @Resource
    private LettuceConnectionFactory redisConnectionFactory;

    @Bean
    public RedisSerializer fastJsonJsonRedisSerializer() {
        return new FastJsonRedisSerializer(Object.class);
    }

    @Bean
    @Primary
    public RedisTemplate initRedisTemplate(RedisSerializer fastJsonJsonRedisSerializer) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(fastJsonJsonRedisSerializer);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(fastJsonJsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

  LettuceConnectionFactoryのインポート時に@Resourceを使用してもエラーは発生しません.
3.原因(各種調査資料による)
 IDEAはSpringの文脈、すなわちSpringを認識できる注釈@Autowiredを理解できるが、@Mapper@MapperScanはMybatisであり、IDEAは理解できない.  IDEAはSpringの注釈@Autowiredを手に入れたので、@Autowiredで使っているbeanを探しに行きます.しかしMyBatisの注釈が理解できないのもbeanを生成するためのもので、Mapperが生成したBeanが見つからない. commonモジュールには確かにLettuceConnectionFactoryのBeanは存在しないのでIDEAは見つかりません.  なぜ@Resourceにすればよいのでしょうか?@ResourceもSpringの注釈ではないので、IDEAはbeanを探しているのか理解できず、探していません.
4.参考
  • http://www.imooc.com/article/287865
  • https://blog.csdn.net/myushu/article/details/79548442