IDEAエラーCould not autowire.No beans of'XXXXXX'type found
2927 ワード
1.問題の説明
IDEAでSpringの注記@Autowiredを使用すると、プログラムは正常に動作しますが、ideaの赤エラー
2.重要な前提
プログラムが正常に実行され、エラーがないことを示します.beanは実際に存在します.
3.私が出会った2つのシーン(研究が深くなく、他のシーンは保証できない)
3.1 Mybatisを使用して、@Service注記のクラスに@AutowiredでMapperクラスをインポート
Applicationクラスに
3.2 redisのconfigファイルは共通モジュールcommonに配置する
複数のマイクロサービスA、B、C、D…などがあり、いずれもredisを使用し、同じプロファイルを使用しますが、異なるredisサービスに接続するため、RedisTemplateのBeanをcommonモジュールに配置し、他のすべてのモジュールで使用できるようにし、各モジュールで独自のLettuceConnectionFactoryを定義します.以下の通りです
LettuceConnectionFactoryのインポート時に@Resourceを使用してもエラーは発生しません.
3.原因(各種調査資料による)
IDEAはSpringの文脈、すなわちSpringを認識できる注釈
4.参考http://www.imooc.com/article/287865 https://blog.csdn.net/myushu/article/details/79548442
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.参考