Netty-4 无法依赖注入Services

今天博主在写数据库的时候遇到一个问题:

@ChannelHandler.Sharable
public class TcpHandler extends ChannelInboundHandlerAdapter {
	@Autowired
	private FormRepository formRepository; //这个借口注入不来啊!气
	@Override
		public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception{
		//本渣意图是在客户端来一组数据的时候,存入数据库
		//此处插入数据
		
	}
}

解决方式:手动注入,本工程使用Netty-4,灵感来源于这位博主Netty-3的演示
https://blog.csdn.net/oJueQiang123456/article/details/92972799

下面书写Netty-4的方法:

  1. 新建一个SpringUtil类:

      @Component
      public class SpringUtil implements ApplicationContextAware {
        private static ApplicationContext ac;
    
        @Override
      	public void setApplicationContext(ApplicationContext arg0) throws BeansException {
              ac = arg0;
        }
    
          public static ApplicationContext getApplicationContext() {
             return ac;
        }
    
      /**
       * 通过class获取Bean
       */
     	public static <T> T getBean(Class<T> clazz){
          return getApplicationContext().getBean(clazz);
     	}
    
    
     /**
      * 如果BeanFactory包含所给名称匹配的bean返回true
      * @param name
      * @return boolean
     */
     	public static boolean containsBean(String name) {
     		return ac.containsBean(name);
     	}
    
      /**
       * 判断注册的bean是singleton还是prototype。
       * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
       * @param name
       * @return boolean
       */
     	public static boolean isSingleton(String name) {
     		return ac.isSingleton(name);
     	}
    
      /**
     	* @param name
     	* @return Class 注册对象的类型
     	*/
     	public static Class<?> getType(String name) {
     		return ac.getType(name);
     	}
    
     }
    
  2. 使用:

     @ChannelHandler.Sharable
     public class TcpHandler extends ChannelInboundHandlerAdapter {
     private static FormRepository formRepository;
    
     static {
     		formRepository = SpringUtil.getBean(FormRepository.class);
     	}
     	
     	@Override
     	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception{
     	
     		//此处插入数据
     		FormData formData=new FormData();
             formData.setEquipno("1201113");
             formData.setContent("333");
    
             formRepository.save( formData);
     	
     	}
     }
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值