大佬教你在springMVC中使用dubbo注解配置的问题
2018-09-04 22:35
896 查看
问题,在controller中无法通过注解自动注入dubbo服务,
但是在service中可以自动注入。
package com.sl;[url=mailto:br/>@Controller
@Controller
//期望注入dubbo服务
@Reference(version=]br/>//期望注入dubbo服务
@Reference(version="1.0.0")
//注入service
@Autowired
//注入service
@Autowired
public void p() throws IOException{
//o is null!没有自动注入
//s 自动注入且s.s()中dubbo服务也注入成功
}
}
package com.sl;[url=mailto:br/>@Service
@Service
//成功注入dubbo
@Reference(version=]br/>//成功注入dubbo
@Reference(version="1.0.0")
//o is not null!可以直接使用
}
}
经过分析,原来配置导致两个上下文,一个是根上下文,一个是springMVC的上下文,
dubbo的注解配置在根上下文中,因此无法解析springMVC bean的注入。
当前配置:
web.xml
....
< !--
tomcat启动后,此设置导致spring生成根上下文,且使用默认的applicationContext.xml来获得其他设置。
根上下文保存在ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
可以用spring工具类获得:WebApplicationContextUtils.getWebApplicationContext(ServletContext);
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
< /listener>
...
springMVC
org.springframework.web.servlet.DispatcherServlet
1
< /servlet>
applicationContext.xml
...
< !-- dubbo会在根上下文注册postProcessBeforeInitialization,
所以以后这里生成的bean中的@Reference都会被正确解析注入
-->
springMVC-servlet.xml
...
< !-- MVC注解驱动 -->
< !-- sprint MVC 注解扫描包-->
...
解决办法:
1.只将dubbo服务注入到service和Repository中而不是Controller中,其实大部分时候都可如此
2.去掉web.xml中listener,将全部配置都放到springMVC-servlet.xml,这样只生成一个上下文。
3.在springMVC-servlet.xml也加入duboo的配置,这样虽然有了冗余,但是可以保证两个上下文。
大家可以关注一下小编,小编帮您解答一切疑虑。
但是在service中可以自动注入。
package com.sl;[url=mailto:br/>@Controller
@Controller
//期望注入dubbo服务
@Reference(version=]br/>//期望注入dubbo服务
@Reference(version="1.0.0")
//注入service
@Autowired
//注入service
@Autowired
public void p() throws IOException{
//o is null!没有自动注入
//s 自动注入且s.s()中dubbo服务也注入成功
}
}
package com.sl;[url=mailto:br/>@Service
@Service
//成功注入dubbo
@Reference(version=]br/>//成功注入dubbo
@Reference(version="1.0.0")
//o is not null!可以直接使用
}
}
经过分析,原来配置导致两个上下文,一个是根上下文,一个是springMVC的上下文,
dubbo的注解配置在根上下文中,因此无法解析springMVC bean的注入。
当前配置:
web.xml
....
< !--
tomcat启动后,此设置导致spring生成根上下文,且使用默认的applicationContext.xml来获得其他设置。
根上下文保存在ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
可以用spring工具类获得:WebApplicationContextUtils.getWebApplicationContext(ServletContext);
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
< /listener>
...
springMVC
org.springframework.web.servlet.DispatcherServlet
1
< /servlet>
applicationContext.xml
...
< !-- dubbo会在根上下文注册postProcessBeforeInitialization,
所以以后这里生成的bean中的@Reference都会被正确解析注入
-->
springMVC-servlet.xml
...
< !-- MVC注解驱动 -->
< !-- sprint MVC 注解扫描包-->
...
解决办法:
1.只将dubbo服务注入到service和Repository中而不是Controller中,其实大部分时候都可如此
2.去掉web.xml中listener,将全部配置都放到springMVC-servlet.xml,这样只生成一个上下文。
3.在springMVC-servlet.xml也加入duboo的配置,这样虽然有了冗余,但是可以保证两个上下文。
大家可以关注一下小编,小编帮您解答一切疑虑。
相关文章推荐
- 大佬教你在springMVC中使用dubbo注解配置的问题
- springMVC中使用dubbo注解配置的问题
- springMVC中使用dubbo注解配置的问题
- springMVC中使用dubbo注解配置的问题
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- SpringMVC混合使用多种视图配置问题
- springmvc里使用注解进行拦截器配置
- 使用SpringMVC注解ResponseBody返回Json数据可能遇到的问题
- 使用注解的方法进行springMvc的配置
- 使用SpringMVC时添加了web.xml中的DispatchServlet配置后出现Tomcat服务器无法启动的问题
- springmvc 中常用的注解配置使用说明
- Servlet3.1使用@WebServlet注解配置问题记录
- (推荐使用)SpringMVC注解,基本配置
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- spring mvc 第四天【注解实现springmvc 配合使用Exception Resolver 的配置】
- SpringMVC使用注解配置AOP
- 配置SpringMVC注解遇到的一些小问题
- SpringMVC_配置和注解--跟海涛学SpringMVC(和自己在项目中的实际使用的对比)
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题