Spring中@Component类下的@Resource或@Autowired无效

概述

@Component类下的@Resource@Autowired无效

下面的注入并没有成功

1
2
3
4
5
6
7
8
9
10
11

@Component
@Slf4j
public class WebSocketServer {

/**
* 聊天信息分发
*/
@Resource(name = "socketRouter")
private ISocketRouter socketRouter;
}

原因 1

在使用@Component注解将bean实例化到spring容器内的时候,@Resource@Autowired是在这个bean之中的,@Resource@Autowired
还未完成自动装载,所以导致servicenull

解决方法

在加载当前 bean时,set方法会再次执行一次.

注意,参数为静态变量,因为这里的 set 方法只会执行一次.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@Component
@Slf4j
public class WebSocketServer {

/**
* 聊天信息分发
*/
private static ISocketRouter socketRouter;

@Resource(name = "socketRouter")
public void setEmployeeServer(ISocketRouter socketRouter) {
this.socketRouter = socketRouter;
}
}

本文地址: https://github.com/maxzhao-it/blog/post/27993/