springMVC中使用dubbo注解配置的问题

问题,在controller中无法通过注解自动注入dubbo服务,
但是在service中可以自动注入。

package com.sl;

@Controller
public class P{

//期望注入dubbo服务
@Reference(version="1.0.0")
private I0 o;

//注入service
@Autowired
private S s;


@RequestMapping("p")
public  void p() throws IOException{

//o is null!没有自动注入
//s 自动注入且s.s()中dubbo服务也注入成功

}

}


package com.sl;

@Service
public class S{

//成功注入dubbo
@Reference(version="1.0.0")
private I0 o;


public  void s() throws IOException{

//o is not null!可以直接使用

}

}


经过分析,原来配置导致两个上下文,一个是根上下文,一个是springMVC的上下文,
dubbo的注解配置在根上下文中,因此无法解析springMVC bean的注入。

当前配置:
web.xml
....


 org.springframework.web.context.ContextLoaderListener

...



        springMVC
        org.springframework.web.servlet.DispatcherServlet
        1


applicationContext.xml
...



 


springMVC-servlet.xml
...


  


...


解决办法:
1.只将dubbo服务注入到service和Repository中而不是Controller中,其实大部分时候都可如此
2.去掉web.xml中listener,将全部配置都放到springMVC-servlet.xml,这样只生成一个上下文。
3.在springMVC-servlet.xml也加入duboo的配置,这样虽然有了冗余,但是可以保证两个上下文。



你可能感兴趣的:(spring)