本文小编为大家详细介绍“netty中spring对象注入失败怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“netty中spring对象注入失败怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

netty中spring对象注入失败

今天在做项目的时候发现在netty中注入service失败,百度许久后也找不到答案(@Component,@PostConstruct)未起作用,后灵光一现

发现了问题所在

如图:

这些地方都必须通过spring注入才能实现其他依赖注入,之前这里都是采用new的,所以导致spring注入失败

在netty中注入spring成份

前不久,在Netty中使用到数据库数据,由于Netty服务启动后的上下文与 Spring的上下文不同,所以在Netty中获取DAO数据很头痛,无法使用@Autowired注入。

Aware本义就是"自动的",顾名思义Spring自动做了些事情。在此某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器,此时就必须先获取Spring容器,然后借助于Spring容器实现该功能。

为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。

可以通过以下方式

importorg.springframework.beans.BeansException;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;importorg.springframework.stereotype.Component;/****@authorshilei**@time2019年6月19日下午5:17:50**@descNetty中注入SpringAutowired*/@ComponentpublicclassToolNettySpirngAutowiredimplementsApplicationContextAware{privatestaticApplicationContextapplicationContext;@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{if(ToolNettySpirngAutowired.applicationContext==null){ToolNettySpirngAutowired.applicationContext=applicationContext;}}//获取applicationContextpublicstaticApplicationContextgetApplicationContext(){returnapplicationContext;}//通过name获取Bean.publicstaticObjectgetBean(Stringname){returngetApplicationContext().getBean(name);}//通过class获取Bean.publicstatic<T>TgetBean(Class<T>clazz){returngetApplicationContext().getBean(clazz);}//通过name,以及Clazz返回指定的Beanpublicstatic<T>TgetBean(Stringname,Class<T>clazz){returngetApplicationContext().getBean(name,clazz);}}

在使用时 可在某业务Handler中添加以下代码:

privatestaticNodeServServicenodeServService;static{nodeServService=ToolNettySpirngAutowired.getBean(NodeServService.class);}privatestaticNodeJpaRepositorynodeDao;static{nodeDao=ToolNettySpirngAutowired.getBean(NodeJpaRepository.class);}

读到这里,这篇“netty中spring对象注入失败怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。