因为在初始话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("有一个新的用户加入---"); } }
转自:https://www.codeleading.com/article/82763511153/