广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何在Netty中注解使用Service或者Mapper
  • 882
分享到

如何在Netty中注解使用Service或者Mapper

2024-04-02 19:04:59 882人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录Netty注解使用Service或MapperHandlerServer创建Server二次修订Netty handler注入service为空注入方式Netty注解使用Serv

Netty注解使用Service或Mapper

SpringBoot搭配Netty使用,在Handler中注解使用Service/Mapper 一直 为null。起初使用 springBoot启动类继承ApplicationContextAware,再写一个静态方法获取Bean来解决。

放在服务器上跑了几个小时就出现了问题,好像是该方案造成的。

另辟蹊径,再看网上给出的答案,因为 Handler 是 new出来的,不被Spring管理,所以注解根本就没有什么作用。

思前想后,(有BUG,下文修正解决:觉得可以给Handler添加@Component 注解交给Spring 管理,再通过构造方法把 Handler 传递给Server。结构代码):

Handler

@Component
public 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<SocketChannel>() { //
            @Override
            public void initChannel(SocketChannel ch) throws Exception {
                ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(1024*1024,0,4));
                ch.pipeline().addLast(obdHandler);
            }
        });
    }
}

创建Server

@Configuration
public 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<SocketChannel>() { //
            @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
@Component
public 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类即可

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 如何在Netty中注解使用Service或者Mapper

本文链接: https://www.lsjlt.com/news/139150.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Netty中注解使用Service或者Mapper
    目录Netty注解使用Service或MapperHandlerServer创建Server二次修订Netty handler注入service为空注入方式Netty注解使用Serv...
    99+
    2022-11-13
  • 怎么在Netty中注解使用Service或者Mapper
    这篇文章主要介绍了怎么在Netty中注解使用Service或者Mapper,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Netty注解使用Service或MapperSpri...
    99+
    2023-06-29
  • spring中如何使用@Service注解
    本篇文章为大家展示了spring中如何使用@Service注解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。@Service注解的使用要说明@Service注解的使用,就得说一下我们经常在sprin...
    99+
    2023-06-20
  • 如何在SpringBoot中使用main方法注入service
    如何在SpringBoot中使用main方法注入service?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、SpringBoot中的main方法注入service在spri...
    99+
    2023-06-15
  • 如何在PHP中使用Netty函数
    Netty是一个高性能的网络编程框架,可以用于构建稳定、灵活的网络应用程序,而PHP则是一种流行的服务器端脚本语言,被广泛应用于Web开发。在本文中,我们将介绍如何在PHP中使用Netty函数。安装Java和Netty在使用Netty之前,...
    99+
    2023-05-18
    函数 PHP netty
  • Mybatis如何使用@Mapper和@MapperScan注解实现映射关系
    目录使用@Mapper和@MapperScan注解实现映射关系Mybatis-@MapperScan和mybatis:scan分析<mybatis:scan>Mapper...
    99+
    2022-11-12
  • 在netty中如何使用native传输协议
    本篇内容主要讲解“在netty中如何使用native传输协议”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在netty中如何使用native传输协议”吧!简介对于IO来说,除了传统的block ...
    99+
    2023-06-30
  • 注解如何在JAVA中使用
    注解如何在JAVA中使用 ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。何为注解注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是:生成...
    99+
    2023-05-31
    java 注解 ava
  • 如何在Android中使用 AOP注解
    今天就跟大家聊聊有关如何在Android中使用 AOP注解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、简介在Android 里面 注解主要用来干这么几件事:和编译器一起给你一些...
    99+
    2023-05-31
    android aop 注解
  • @profile注解如何在spring中使用
    本篇文章给大家分享的是有关@profile注解如何在spring中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先是新建maven工程mvn archetype:gene...
    99+
    2023-05-30
    spring profile
  • @RequestParam注解如何在SpringMVC中使用
    这期内容当中小编将会给大家带来有关@RequestParam注解如何在SpringMVC中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。自SpringMVC4.2之后,RequestParam内部有4...
    99+
    2023-05-31
    springmvc @requestparam ue
  • 如何在Spring中使用@Transactional注解
    这期内容当中小编将会给大家带来有关如何在Spring中使用@Transactional注解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。@Transactionalservice A(){try...
    99+
    2023-06-15
  • 如何在mapper文件中使用in("str1","str2")
    mapper文件使用in("str1","str2") mybatis的xxxMapper.xml文件中,如果筛选的字段使用的是varchar...
    99+
    2022-11-12
  • 如何在Spring中使用@Override和@Autowired注解
    如何在Spring中使用@Override和@Autowired注解?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、Override首先,@Override 注解是伪代码...
    99+
    2023-06-15
  • 如何在Java中正确的使用注解
    如何在Java中正确的使用注解?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。注解是jdk1.5新增的特性.大家都知道,jdk1.5在java的发展史上有着划时代的意义.而注...
    99+
    2023-05-31
    java 注解 ava
  • Mybatis中Mapper使用package方式配置报错如何解决
    这篇文章主要讲解了“Mybatis中Mapper使用package方式配置报错如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis中Mapper使用package方式配置报错...
    99+
    2023-06-20
  • 在Spring-Boot中如何使用@Value注解注入集合类
    我们在使用spring框架进行开发时,有时候需要在properties文件中配置集合内容并注入到代码中使用。本篇文章的目的就是给出一种可行的方式。 1.注入 通常来说,我们都使用@V...
    99+
    2022-11-12
  • Vue中如何使用方法、计算属性或观察者模式
    这篇文章主要为大家展示了“Vue中如何使用方法、计算属性或观察者模式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何使用方法、计算属性或观察者模式”这...
    99+
    2022-10-19
  • 在SpringBoot中,如何使用Netty实现远程调用方法总结
    Netty Netty是一个NIO客户端服务器框架: 它可快速轻松地开发网络应用程序,例如协议服务器和客户端。 它极大地简化和简化了网络编程,例如TCP和UDP套接...
    99+
    2022-11-12
  • 如何在JavaScript中使用装饰者模式
    这篇文章给大家介绍如何在JavaScript中使用装饰者模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript的作用是什么1、能够嵌入动态文本于HTML页面。2、对浏览器事件做出响应。3、读写HTML元...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作