controller中的@autowired是什么时候起作用的?

是在服务器启动的时候就自动装配还是在前台访问到后台的时候?

我猜测不是在服务器启动的时候,因为service中的@autowired并没有起作用,service中的autowired
感觉是依赖controller的?

spring IOC容器相当于一个聚宝盆,@Autowired这个标注是告诉这个容器,我需要用它,你给我把它装进你这个盆子里。当我用它的时候,你给我就行。

肯定是先调用service层啊。因为service层还要装配dao层,如果你不先装配service,直接装配controller的时候也会报错的。

启动时自动装配,
依据:你写个错的,它会在服务器启动的时候报依赖注入失败错误。
假如是前台访问后台的时候的话,不应该报这个错误

服务器启动时,它会去加载配置文件,在那时去注入及其他的初始化。

装配bean,启动时装配

在服务器启动的时候,会加载配置文件,配置文件中有包扫描器和注解驱动,系统会根据配置进行扫描注入。下面不妨做一个试验:我现在将我的注册中心的服务删除:


也就是将上面这个服务注释了。但是在我的后台管理平台注入了这个服务,如:
@Autowired
private CustOrderLogService custOrderLogService;
那么我现在启动服务器:
报错:严重: StandardWrapper.Throwable
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderController': Unsatisfied dependency expressed through field 'custOrderLogService';
我们需要明白:service中的@autowired不只是可以在controller使用,在其他的service中也是可以使用的。
结论:首先是带有@autowired的service肯定是先被实例化了(不然也不能注入到其他的类中)。不要单独去理解service中的@autowired,要结合上下文去看待。首先明白带有@autowired的service是不是注入在了其他类,而这个类是不是也参与了实例化。不管是在service类中使用了带有@autowired的service,还是在controller中使用了带有@autowired的service。只要是service和controller实例化的时候,那么这个@autowired就会生效。而就相当于空object.calll()一样。如object为null的时候,就会出现空指针异常,如果不调用call方法,就没有什么问题。