因为在初始话netty的时候,handler是new出来的,没有托给spring容器管理,所以无法依赖注入,解决方法也很简单:
第一步:加@component
@Component
public class handler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
第二步,创建handler的静态对象
private static handler handler;
第三步:使用@PostConstruct初始化
@PostConstruct
//因为是new出来的handler,没有托给spring容器,所以一定要先初始化,否则autowired失效
public void init() {
handler = this;
}
最后,在要使用依赖注入的地方前面加一个handler.即可
handler.examFeign.FeignGetData(eId);
完整实列:
@Component
@RabbitListener(queues = "rtQueue")
public class handler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
private static handler handler;
@Autowired
examFeign examFeign;
static {
list = new ConcurrentHashMap<>();
}
@PostConstruct
//因为是new出来的handler,没有托给spring容器,所以一定要先初始化,否则autowired失效
public void init() {
handler = this;
}
//监听消息,定时发送数据
@RabbitHandler
public void handler(String eId) throws Exception {
Map map=handler.examFeign.FeignGetData(eId);
}
@Override
protected void messageReceived(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame textWebSocketFrame) throws Exception {
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
//代做删除功能
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
System.out.println("有一个新的用户加入---");
}
}