先检查注解@Service或者@Mapper有没有遗漏,启动类扫描包和注解配置一种就OK,有时候问题不好找就在错误位置慢慢的实验(度娘也无解的话)
三种注入方式
- 常见的变量注入,最近使用idea有时候用这个注入失败,改用set就可以了
@Autowired
private IService service;
- set注入
private IService service;
@Autowired
public void setService(IService service) {
this.service = service;
}
- 构造注入
public class TestController {
privateTestService testService;
@Autowired
public TestController(TestService testService) {
this.testService = testService;
}
}
反射获取当前泛型的真实类型Class
- java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
// 错误位置代码
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
modelClass = (Class<T>) pt.getActualTypeArguments()[0];
- 利用反射获取当前泛型的真实类型Class,上面这段代码,因为在编译器进行编译的时候,还不能确定泛型的具体类型,所以会报这个错误:改为:
Class c = this.getClass();
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType) {
Type[] p = ((ParameterizedType) t).getActualTypeArguments();
this.modelClass = (Class<T>) p[0];
}
接口使用泛型无法Autowired注入
Could not autowire. No beans of 'ItemRepository<T>' type found.
因为spring在加载的时候,扫描类(或接口),组装bean,泛型不知道如何组装,修改如下:
@NoRepositoryBean
public interface ItemRepository<T> {
}
@Resource
@Lazy
private ItemRepository<T> itemRepository;
availableProcessors is already set to [6], rejecting [6]
Springboot整合Elasticsearch报错,启动类加上如下代码
System.setProperty("es.set.netty.runtime.available.processors", "false");