当前位置: 首页 > article >正文

Netty的handler类无法进行spring的注入service等操作,注入为null情况

项目使用场景

        在springboot结合netty过程中,在handler处理器中注入发现报错,显示空指针异常。可是明明添加了spring的注解注册到容器中为什么没有用?

原因

        netty自身维护了一套管理机制,handler类的实例是由netty自身创建和管理的。因此,Spring 无法自动将依赖注入容器中。

具体原因请百度细查他们的生命周期

解决方法

  1. 写一个工具类获取ApplicationContext 
  2. 使用工厂模式

上述两种自行百度,这里只做小体量项目中可以方便用到的。

代码

@Slf4j
@Component
public class WebSocketFrameHandler extends ChannelInboundHandlerAdapter {

	@Resource
	private UserService userService;

	public static WebSocketFrameHandler webSocketFrameHandler;

	@PostConstruct
	public void init() {
		webSocketFrameHandler = this;
	}

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		webSocketFrameHandler.userService.方法
	}
}

在Bean 初始化完成后,Spring 会调用 init() 方法。在 init() 方法中,将当前实例(this)赋值给静态变量 webSocketFrameHandler,从而可以在静态上下文中访问实例变量。

水一篇


http://www.kler.cn/a/513204.html

相关文章:

  • 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)
  • FPGA开发中的团队协作:构建高效协同的关键路径
  • WPF3-在xaml中引用其他程序集的名称空间
  • RestTemplate-调用远端接口应用场景
  • 根据经纬度查询地理位置信息API
  • React技术栈搭配(全栈)(MERN栈、PERN栈)
  • [Css]父元素监听鼠标移入子元素
  • Kotlin 2.1.0 入门教程(七)
  • 若依报错:无法访问com.ruoyi.common.annotation
  • 微信小程序使用picker根据接口给的省市区的数据实现省市区三级联动或者省市区街道等多级联动
  • 在Android Studio中如何实现综合实验MP3播放器(保姆级教程)
  • Java学习,List 元素替换
  • 服务器安装ESXI7.0系统及通过离线包方式升级到ESXI8.0
  • Y3编辑器功能指引
  • Redis单线程为什么能这么快
  • grafana+prometheus监控linux指标
  • 美区TikTok解封后如何回归使用?
  • 软件授权产品介绍
  • 算法题目总结-栈和队列
  • 数据库基础知识:理论、E-R图、事务、原则