DUBBO出错笔记(三)shiro 自定义realm注入失败解决办法

来源:互联网 发布:vp影业 知乎 编辑:程序博客网 时间:2024/05/18 02:12

shiro 自定义realm注入失败解决办法
在与dubbo结合的项目中,在controller层会无论是使用dubbo的@refrence注解注入还是在xml中定义dubbo的service然后使用@autoware注入都是可以成功注入,但是在自定义realm中两种方式都无法注入,由于dubbo的注入原理没有弄明白,所以一开始解决这个办法就是自己配置bean然后使用spring的autoware注解注入,然而在debug过程中会发现对应的service也是null,
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
ISysUserService sysUserService = (ISysUserService) wac.getBean("sysUserService");

所以就想使用以上代码测试一下是否有这个bean,果然发现报错,没有name为sysUserService的bean,最后终于找出原因,原因大致如下:
在一个典型的Spring MVC项目中有两个“容器”:一个是由ContextLoaderListener创建的,另一个是由DispatchServlet创建的。Web应用程序可以定义任意数量的DispatcherServlet。每个servlet将在其自己的命名空间中操作,使用映射,处理程序等加载其自己的应用程序上下文。只有由ContextLoaderListener加载的根应用程序上下文(如果有)将被共享。因此可以具有任何数量的子容器。
这句话的意思就是ContextLoaderListener创建的是父级,dispatchServlet创建的是子级,只有父级的上下文可以被共享,而父级中是无法获取子级的上下文,而我的出错原因我个人猜测是由于shiro是定义在父级中的,而bean都定义在子级中了,导致注入不了,最后把配置文件调整好就可以注入了但是还无法使用dubbo的注解注入(原因还在探索中,先留下笔记)
附上参考链接:

http://stackoverflow.com/questions/3652090/difference-between-applicationcontext-xml-and-spring-servlet-xml-in-spring-frame

http://stackoverflow.com/questions/18578143/about-multiple-containers-in-spring-framework/18580299#18580299

0 0
原创粉丝点击