关于@autowired注解, 求助求助

在controller中有
@autowired
private IService service;

在service中有
@autowired
private IDao dao;

我的问题是: 两个之中都有@autowired, 那么哪一个先起作用; 为什么?

我自己测的时候,发现应该是controller中的先起作用; 才去遍历注入的service中的dao
; 如果没有controller, 那么dao将空指针

controller->service->dao 调用链是这样的吧。肯定是先Controller中的注解先起作用啊

看谁先调用你可以先把控制层的注解去掉,或者先屏蔽掉,项目会不会报错,再屏蔽service,反之先屏蔽dao,在屏蔽service,这样理解更快

这是Spring依赖注入注解,是根据注入顺序是根据调用的先后顺序来排序的,就像以后讲的,至于说跳过Cotroller层,我可以理解为可能又有其他的Service层也会调用这个service,发生你那种情况:你需要看一下调用方有没有注入被调的Service。

就像楼上大哥说的一样,spring依赖注入注解是有顺序的,你可以看看spring依赖注入是如何写的,controller不写不加注解 导致后面的几层找不到父节点。

据我所知注解是基于反射的,在编译期执行。而不是在运行期执行。@autowired我理解就是将其变成一个set方法。
调用自然按照controller-service-dao。但这个时候注解早就已经生效了。你应该看看编译时是按照什么什么顺序编译的

autowired不是根据类型匹配注入指定类型的实例?跟控制器有毛关系?你只要配置的或扫描到了IDao相关类型,那就一定会注入进来。

@Autowired是用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源,这个是没有顺序的,你说的空指针只是你没有使用这个注解,Bean没有注入进来,所以出现空指针,希望我的回答对您有帮助。

要理解“依赖注入”的意思,有依赖了,才注入;
首先,spring在启动的时候,会扫描@component, @service等,注册到bean工厂里,
当你的@autowired 方法调用的时候,会根据类型去bean工厂里找到bean,然后给你设置属性,类似于“setter”动作。