多层注入 不行啊

来源:5-11 本章小结

慕盖茨205585

2020-07-10

自研ioc 多层注入失败 视频中也没有测试

写回答

3回答

慕盖茨205585

提问者

2020-07-13

我找到了我的问题  如果使用lombok的@Getter的话 是找不到实现了接口的类 其中需要注入的接口的实现类的

1
3
翔仔
回复
慕盖茨205585
没太明白,给属性加了@Autowired,并且相关属性对应的实例之前已经加载到容器里面了的话,是 会自动注入的呀,现在问题解决了没,如果没解决,可以跟下我之前回复的那段注入代码,看看相关的属性对应的bean有没有被创建出来了,并且注入到类了
2020-07-15
共3条回复

翔仔

2020-07-12

for(Class<?> clazz : beanContainer.getClasses()){
//2.遍历Class对象的所有成员变量
Field[] fields = clazz.getDeclaredFields();
if (ValidationUtil.isEmpty(fields)){
continue;
}
for(Field field : fields){
//3.找出被Autowired标记的成员变量
if(field.isAnnotationPresent(Autowired.class)){
Autowired autowired = field.getAnnotation(Autowired.class);
String autowiredValue = autowired.value();
//4.获取这些成员变量的类型
Class<?> fieldClass = field.getType();
//5.获取这些成员变量的类型在容器里对应的实例
Object fieldValue = getFieldInstance(fieldClass, autowiredValue);
if(fieldValue == null){
throw new RuntimeException("unable to inject relevant type,target fieldClass is:" + fieldClass.getName() + " autowiredValue is : " + autowiredValue);
} else {
//6.通过反射将对应的成员变量实例注入到成员变量所在类的实例里
Object targetBean =  beanContainer.getBean(clazz);
ClassUtil.setField(field, targetBean, fieldValue, true);
}
}
}
}

主要调试DependencyInjector看看,你service里面标注@Autowired的成员变量的实例被注入了没,如果没被注入肯定是没有的

0
0

翔仔

2020-07-11

同学好,多层注入是啥意思?就跟spring一样,比如说你controller里面还有一个service的属性的话,需要给service属性进行注入才行,然后service里面又有dao的话,需要给service的dao注入才行。

0
2
绝世的陈逗逗
回复
慕盖茨205585
怎么可能,他是每个类一一遍历的,,只要存器存在都能注入啊
2020-08-31
共2条回复

剑指Java自研框架,决胜Spring源码

快速入门Spring核心源码+从零开发自研框架

1498 学习 · 495 问题

查看课程