本文小编为大家详细介绍“netty中spring对象注入失败怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“netty中spring对象注入失败怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
今天在做项目的时候发现在netty中注入service失败,百度许久后也找不到答案(@Component,@PostConstruct)未起作用,后灵光一现
如图:
这些地方都必须通过spring注入才能实现其他依赖注入,之前这里都是采用new的,所以导致spring注入失败
前不久,在Netty中使用到数据库数据,由于Netty服务启动后的上下文与 Spring的上下文不同,所以在Netty中获取DAO数据很头痛,无法使用@Autowired注入。
Aware本义就是"自动的",顾名思义Spring自动做了些事情。在此某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器,此时就必须先获取Spring容器,然后借助于Spring容器实现该功能。
为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * * @author shilei * * @time 2019年6月19日 下午5:17:50 * * @desc Netty中注入 Spring Autowired */ @Component public class ToolNettySpirngAutowired implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (ToolNettySpirngAutowired.applicationContext == null) { ToolNettySpirngAutowired.applicationContext = applicationContext; } } // 获取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } // 通过name获取 Bean. public static Object getBean(String name) { return getApplicationContext().getBean(name); } // 通过class获取Bean. public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } // 通过name,以及Clazz返回指定的Bean public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
在使用时 可在某业务Handler中添加以下代码:
private static NodeServService nodeServService; static { nodeServService = ToolNettySpirngAutowired.getBean(NodeServService.class); } private static NodeJpaRepository nodeDao; static { nodeDao = ToolNettySpirngAutowired.getBean(NodeJpaRepository.class); }
读到这里,这篇“netty中spring对象注入失败怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。