java - 调用dubbo接口,用xml实例化bean时报No bean named 'XXX' is defined
ringa_lee
ringa_lee 2017-04-18 10:00:43
0
3
947

大神们耽误1min给瞅瞅什么问题,小妹在此谢过了
1.本地远程调用dubbo接口,用xml实例化bean时报No bean named 'projectInterfaces' is defined
2.我本地的xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    <context:annotation-config/> 
    <context:component-scan base-package="*"/>    
    <dubbo:application  name="mydubbo"/>    
    <dubbo:registry address="zookeeper://10.11.145.91:2181?backup=10.11.145.100:2181,10.11.145.103:2181" group=""/>   
    <dubbo:protocol name="dubbo" port="-1" serialization="" threads="500"/>
  
    <dubbo:reference id="projectInterfaces" interface="com.abc.trade.projectcenter.interfaces.ProjectInterfaces" check="false" timeout="10000" retries="0" group ="test"/>      
</beans>

3.我的实例化bean代码

public class TestProject {
    public static void main(String[] args) throws Exception {  
        ApplicationContext  context = new ClassPathXmlApplicationContext(  
                new String[]{"classpath*:spring-config-consumer.xml"});

        ProjectInterfaces projectInterfaces = (ProjectInterfaces)context.getBean("projectInterfaces");                                                                    
        
        Message<List<Project>>  msg = projectInterfaces.getProjectsByProductCode("602003162805","200000013631");

        List<Project> m = msg.getData();
        for (Project project : m){
            System.out.println(project.toString());
        }
    }  
}

4.xml中的配置的dubbo:reference id 和interface都是照着其他消费者模块的配置写的(测试环境这些模块都是能正常调用到这个接口的),这个应该没有写错
5.报错是

ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
洪涛

dubbo producer需要在zookeeper中註冊才能被cosumer調用,你看一下你這個producer註冊沒有

伊谢尔伦

你的spring-config-consumer.xml檔案沒有被spring容器加載,所以你注入的這個bean才會在容器裡找不到。
context需要呼叫start方法才行。

ApplicationContext  context = new ClassPathXmlApplicationContext(  
                new String[]{"classpath*:spring-config-consumer.xml"});
context.start();

試試吧

洪涛

看我給你的程式碼

//提供者配置
<dubbo:service interface="InterfaceService" ref="service" timeout="60000"/>
<bean id="service" class="ServiceImpl" />
    
//消费者配置
<dubbo:reference id="service" interface="InterfaceService" />

在springMVC控制器如下使用則會引用到

//消费者引用
@Resource
    private InterfaceService service;

也就是說你要有一個接口,InterfaceService,並且在服務提供者那邊有個類ServiceImpl實現了這個接口,並且需要創建這個實現類的一個對象service提供給消費者。在提供者方用這句話建立了被提供的那個service,用ref="service"指明你要提供的就是bean id="service" 的那個對象,在服務端用來接收,使用的時候透過InterfaceService這個共同的介面類型來引用,這樣就能拿到service 並且使用了

你的問題在於沒有那個服務提供的實作類,沒有它的對象,你所指明的 ref並不能對應一個確實存在的對象,你這個ref指定引用是空的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!