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