怎么在Netty中注解使用Service或者Mapper
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍了怎么在Netty中注解使用Service或者Mapper,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Netty注解
千家信息网最后更新 2025年11月09日怎么在Netty中注解使用Service或者Mapper
这篇文章主要介绍了怎么在Netty中注解使用Service或者Mapper,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Netty注解使用Service或Mapper
SpringBoot搭配Netty使用,在Handler中注解使用Service/Mapper 一直 为null。起初使用 SpringBoot启动类继承ApplicationContextAware,再写一个静态方法获取Bean来解决。
放在服务器上跑了几个小时就出现了问题,好像是该方案造成的。
另辟蹊径,再看网上给出的答案,因为 Handler 是 new出来的,不被Spring管理,所以注解根本就没有什么作用。
思前想后,(有BUG,下文修正解决:觉得可以给Handler添加@Component 注解交给Spring 管理,再通过构造方法把 Handler 传递给Server。结构代码):
Handler
@Componentpublic class OBDHandler extends ChannelInboundHandlerAdapter { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private OBDMapper mOBDMapper;}Server
public class OBDServer { private Logger log = LoggerFactory.getLogger(getClass()); private OBDHandler obdHandler; private int port; public OBDServer(int port,OBDHandler obdHandler) { this.port = port; this.obdHandler = obdHandler; } private void bind() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(group)// .channel(NioServerSocketChannel.class) // .childHandler(new ChannelInitializer() { // @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(1024*1024,0,4)); ch.pipeline().addLast(obdHandler); } }); }} 创建Server
@Configurationpublic class NettyConfig { @Autowired private OBDHandler obdHandler; @Bean public OBDServer obdServer(){ OBDServer obdServer = new OBDServer(7788,obdHandler); obdServer.startServer(); return obdServer; }}二次修订
并发需要创建多个Handler,而被Spring托管的单例Handler会造成以下错误:
is not a @Sharable handler, so can't be added or removed multiple times.
最终通过在Server中注入 Service/Mapper,再通过Handler构造传递:
public class OBDServer { @Autowired private OBDMapper mOBDMapper; public OBDServer(int port) { this.port = port; } private void bind() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(group)// .channel(NioServerSocketChannel.class) // .childHandler(new ChannelInitializer() { // @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(1024*1024,0,4)); ch.pipeline().addLast(new OBDHandler(mOBDMapper)); } }); }} Netty handler注入service为空
注入方式
@Slf4j@Componentpublic class BootNettyChannelInboundHandlerAdapter extends ChannelInboundHandlerAdapter { public static BootNettyChannelInboundHandlerAdapter bootNettyChannelInboundHandlerAdapter; //1.正常注入[记得主类也需要使用@Component注解] @Autowired private DeviceUpService deviceUpService; //2.初始化构造方法一定要有 public BootNettyChannelInboundHandlerAdapter() { } //3.容器初始化的时候进行执行-这里是重点 @PostConstruct public void init() { bootNettyChannelInboundHandlerAdapter = this; bootNettyChannelInboundHandlerAdapter.deviceUpService = this.deviceUpService; }}完成以上步骤后通过
bootNettyChannelInboundHandlerAdapter.deviceUpService
调用service类即可
感谢你能够认真阅读完这篇文章,希望小编分享的"怎么在Netty中注解使用Service或者Mapper"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
注解
篇文章
方法
管理
思前想后
另辟蹊径
下文
代码
价值
作用
兴趣
同时
多个
容器
小时
方式
方案
时候
更多
朋友
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
尚线网络技术
微信删除记录数据库会跟着删除吗
体育器材管理系统 数据库
gpu服务器有哪些功能
以色列网络安全机构
郑州哪些打车软件开发
http 服务器app
汇达软件开发公司
网络安全隐形巨头
数据库 共享锁 排他锁
软件开发无锡友鹏
access数据库后缀名
严谨的软件开发态度
数据库工程师技术拓扑图
服务器关闭电源报警
惠州服务器atisz
MS美啦社交软件开发公司
win10系统连接服务器
清除服务器的安全证书
在小红书做软件开发薪资多少
996引擎服务器测试
福建正规软件开发要多少钱
4u机架式服务器非oem产品
战地5服务器网站
网络安全应用技术教材
简述数据库完整定义
海软学院计算机网络技术类
威海计算机软件开发哪家靠谱
县网络安全自查总结报告
上海美格网络技术怎么样