之前也遇到过bean注入失败但是好像并没有当回事,很快捷锁定了原因 但是最近接到任务 要求用一个Netty接收某设备发动来的数据并解析,个人使用的SpringBoot和Netty整合 在NettyHandle中注入Service层是一直无法注入,百思不得解
描述一下问题:
正常注入bean都是可以注入,无法注入常见的无非3种问题
1. 没有被加载(没有扫描到)
但是在springboot项目中这种情况肯定基本不会存在,(只要是在SpringBoot启动类的子包下边的类Bean注解都会被扫描到)
2. 没有正确注入对象
这种情况一般出现在为静态对象注入的时候出现 解决方式也很简单使用方法将属性set到属性中即可 上代码
private static LighterServer lighterServer;
@Autowired
private void setLighterServer(LighterServer lighterServer) {
NettyApplication.lighterServer = lighterServer;
}
3. 就是依赖注入存在new 关键字new对象的问题
一直知道,这个但是也是初次使用Netty把这点忽略了
举个例子在使用Netty的时候 从初始化服务的时候会经常使用New 关键字在创建对象 导致后续的嵌套Bean无法正常加载注入 所以一直为null 下边是部分容易忽略的截图
3.1 ok 知道原因 那就来解决一下
首先我们要知道注入某个属性为null的类 是如何被创建出来的(New 或者 注入) 我这里之前是New出来的 上边两个图那样
然后修改一下 注意红框圈出的位置
OK 结束,本文主要是对Netty来进行说明的 因为网上很多Netty例子在初始化服务时 不管是注入初始化器还是注入Handel都是用的New 关键字 模仿的写的小伙伴很容易忽略这点
2019-07-27 补充: 使用bean时候要在bean加载完成后使用 springboot项目要在执行完rum后执行 以下是同一对象 打印出来的结果