请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

3回答

提问者 慕盖茨205585 2020-07-13 10:44:52

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

1 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    同学意思是说需要显式定义@Autowired字段的getter方法吗?
    回复 有任何疑惑可以回复我~ 2020-07-14 01:12:03
  • 提问者 慕盖茨205585 回复 翔仔 #2
    显示定义也没用,只能找到service接口中定义的方法,其它的都获取不到
    回复 有任何疑惑可以回复我~ 2020-07-15 14:10:00
  • 翔仔 回复 提问者 慕盖茨205585 #3
    没太明白,给属性加了@Autowired,并且相关属性对应的实例之前已经加载到容器里面了的话,是 会自动注入的呀,现在问题解决了没,如果没解决,可以跟下我之前回复的那段注入代码,看看相关的属性对应的bean有没有被创建出来了,并且注入到类了
    回复 有任何疑惑可以回复我~ 2020-07-15 23:00:50
翔仔 2020-07-12 00:20:26
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 回复 有任何疑惑可以回复我~
翔仔 2020-07-11 01:30:26

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕盖茨205585 #1
    就是这个意思, 我从controller里面可以获取到里面service的实例,
    但是获取不到这个service实例里面标注@Autowired的成员变量的实例,
    不知道我说清楚没?
    回复 有任何疑惑可以回复我~ 2020-07-11 10:35:11
  • 绝世的陈逗逗 回复 提问者 慕盖茨205585 #2
    怎么可能,他是每个类一一遍历的,,只要存器存在都能注入啊
    回复 有任何疑惑可以回复我~ 2020-08-31 22:50:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信