1. 程式人生 > >springMVC中使用dubbo註解配置的問題

springMVC中使用dubbo註解配置的問題

問題,在controller中無法通過註解自動注入dubbo服務, 但是在service中可以自動注入。

@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服務也注入成功

}

}

@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 …

<dubbo:annotation />

<context:component-scan base-package=“com.sl” />

springMVC-servlet.xml …

<mvc:annotation-driven />

<context:component-scan base-package=“com.sl” />

解決辦法: 1.只將dubbo服務注入到service和Repository中而不是Controller中,其實大部分時候都可如此 2.去掉web.xml中listener,將全部配置都放到springMVC-servlet.xml,這樣只生成一個上下文。 3.在springMVC-servlet.xml也加入duboo的配置,這樣雖然有了冗餘,但是可以保證兩個上下文。