SpringDubbo@reference注解报空指针原因及处理办法
resource和autowired注解的区别如果使⽤过Spring + Dubbo会发现bean装配有三种⽅式
Spring的 @Autowired和@Resource
Dubbo的 @Reference
有时候有些场景三个随便⽤都可以,但有时候会报空指针问题,特别是@Reference
1.场景
controller层@Reference 装配bean对象
2.项⽬结构:
如果项⽬结构如上图⽰例,且l为引⼊l⽂件
3.报错类型
@Reference 装配bean对象空指针,⽆法调⽤远程服务
4.原因
程序启动时读取spring-*.xml配置⽂件,会初始化⼀个xmlwebapplicationcontext也就是应⽤的rootContext顶级容器,这个容器在serverletcontext上下⽂中,然后dispatcherservlet开始初始化,并初始化了controller类,同时将dubbo注解reference的实例set给了controller;
但是接着servlet初始化过程中⼜再⼀次读取了l配置⽂件,同时也对controller进⾏了初始化,但是与顶级容器初始化不同的是,reference实例化的过程没有进⾏,因此在mvc容器中的controller是没有注⼊reference标注的实例的,因此出现NULL的情况。
这⽅⾯可以参考下⾯博客博主分析很详细
5.解决办法
5.1将l引⼊l⽂件;
5.2使⽤注解@autowired或者 @resource 不⽤@Reference;
l ⽂件最后加⼊扫描全项⽬;
<!--注解扫描 -->
<dubbo:annotation package="pen" />
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论