`
y806839048
  • 浏览: 1108163 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

springMVC中使用dubbo注解配置的问题(@contorller 用注解无法注入)

阅读更多

 

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

 

注解放入的对象在spring  root上下文中(服务层的就是spring,就是根),配置的在mvc的上下文中所以配置的mvc可以拿到,根上下文可以拿到子上下文东西,子上下文不可拿到根的东西,和配置化bean的方式配置资源文件一样,mvc层需要获取需要在mvc的配置文件也配置一遍

 

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
....
<!-- 
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的上下文,其父是根上下文。
使用默认的springMVC-servlet.xml配置文件
当一个Request对象产生时,会把这个WebApplicationContext上下文保存在Request对象中,
key是DispatcherServlet.class.getName() + ".CONTEXT"。
可以用spring工具类获得:RequestContextUtils.getWebApplicationContext(request);
-->
<servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>


applicationContext.xml
...

<!-- dubbo使用注解 -->
<dubbo:annotation />

<!-- 需要扫描注解的包 -->
<context:component-scan base-package="com.sl" />  
<!-- dubbo会在根上下文注册postProcessBeforeInitialization,
所以以后这里生成的bean中的@Reference都会被正确解析注入
 -->


springMVC-servlet.xml
...
<!-- MVC注解驱动 -->
<mvc:annotation-driven />
   
<!-- sprint MVC 注解扫描包-->
<context:component-scan base-package="com.sl" />

<!-- springMVC中并没有dubbo配置所以这里生成的controll bean不会解析 @Reference-->
...

 

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

分享到:
评论

相关推荐

    dubbo注解配置demo

    基于springMVC框架的dubbo注解配置。需自己安装zookeeper,否则修改注册地址为multicast方式。两个web项目启动后,访问http://localhost:8080/dubboconsumer/DubboController/testDubboAnnotation.do 进行测试

    Maven+SpringMVC+Dubbo 简单的入门demo配置 源码

    创建Controller类并使用注解如@RequestMapping来定义路由,以及@Service和@Autowired注解来注入服务和依赖。 然后是Dubbo的核心部分。Dubbo是一个高性能、轻量级的服务治理框架,主要用于实现微服务间的远程调用。...

    SpringMVC纯注解配置

    "SpringMVC纯注解配置"是SpringMVC框架的一种高级用法,旨在减少XML配置文件的使用,提高开发效率和代码可读性。在这个主题中,我们将深入探讨如何利用注解实现SpringMVC的配置以及jQuery如何处理后台返回的JSON对象...

    springmvc @Resource 注解方式问题

    在Spring MVC框架中,`@Resource`注解是用来管理依赖注入(Dependency Injection,简称DI)的一种方式。这个注解主要用于标注字段或者方法,以便Spring容器能够自动为它们提供实例化对象。本文将深入探讨`@Resource`...

    springmvc+mybatis+dubbo

    项目可能包含了配置文件、接口定义、服务实现以及消费者端代码,展示了如何将 SpringMVC、MyBatis 与 Dubbo 结合,实现高效、分布式的数据库查询服务。 总结来说,SpringMVC、MyBatis 和 Dubbo 是构建大型分布式...

    SpringMVC整合dubbo和zookeeper详细教程

    Dubbo 可以与 SpringMVC 框架进行整合,提供基于注解的服务调用方式,简化服务调用过程。 Dubbo 的服务调用可以使用 SpringMVC 的 Controller 来调用,提供更加灵活和简洁的服务调用方式。 五、基本概念 * RMI...

    springmvc+springboot+dubbo开发文档

    Spring MVC、Spring Boot和Dubbo是Java开发领域中极为重要的技术框架,它们分别在Web应用、微服务管理和分布式服务调用方面发挥着关键作用。这篇文档将深入探讨这三者的核心概念、工作原理以及如何结合使用。 **...

    Dubbo 简单的入门【Maven+SpringMVC+Dubbo 】源码

    【标题】:“Dubbo 简单的入门【Maven+SpringMVC+Dubbo 】源码”指的是一个教程项目,旨在引导初学者了解如何将Apache Dubbo整合到Maven管理和SpringMVC框架中,以构建分布式服务。在这个项目中,我们将探讨Dubbo的...

    Maven+SpringMVC+Dubbo 简单的入门demo配置

    在IT行业中,构建高效、可扩展的企业级应用是至关重要的,而"Maven+SpringMVC+Dubbo"的组合正是为了实现这一目标。这个入门demo配置将帮助开发者快速理解和掌握这三个关键技术,从而能够构建分布式服务架构的应用。 ...

    SpringMVC全注解配置

    全注解配置是Spring MVC中的一种现代配置方式,它允许开发者在不使用XML配置文件的情况下,通过注解来声明和管理组件。这种方式简化了项目的配置,提高了代码的可读性和可维护性。 在Java环境下,我们通常使用...

    Dubbo + SpringMVC 4.3.1 + Hessian 注解方式Demo工程源码

    整合 Dubbo + SpringMvc 4.3.1 的服务器maven工程样例,使用注解方式定义服务及IOC装配,采用Hessian协议传输 三个工程,在 cnetAdmin 和 cnetBlu 中,要引用 cnetCommon 工程。

    springMVC+spring+dubbo hello world测试项目

    通过注解配置,如@Controller和@RequestMapping,可以简化开发,使得代码更加简洁。 【Spring】 Spring是一个全面的Java企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)、事务管理、JDBC抽象、数据...

    springmvc+dubbo+mybatis+zookeeper可以直接使用的框架demo

    MyBatis 是一个优秀的持久层框架,它简化了Java应用与数据库的交互,通过XML或注解配置映射SQL语句,使得开发者能够将精力集中在业务逻辑上而不是繁琐的JDBC代码。MyBatis 提供了动态 SQL 功能,允许在 SQL 查询中...

    springmvc常用注解标签详解

    在 SpringMVC 框架中,注解标签扮演着非常重要的角色,它们使得开发者可以轻松地定义控制器、请求映射、依赖注入等内容。在本文中,我们将详细地解释 SpringMVC 中常用的注解标签,包括@Controller、@RequestMapping...

    spring+springMvc+MyBatis+注解

    标题中的"spring+springMvc+MyBatis+注解"提到了四个关键点:Spring、SpringMVC、MyBatis以及注解。这四者构成了一个经典的Java Web开发框架组合,通常被称为SSM(Spring、SpringMVC、MyBatis)。下面将详细解释这些...

    springmvc+dubbo

    在 Spring 中,这些信息可以通过 `PropertyPlaceholderConfigurer` 或 `@Value` 注解注入到配置类或 Bean 中。 **Dubbo 知识点:** 1. **服务提供者(Provider)**:提供服务的模块,通过注册中心将自己的服务暴露...

    dubbo zookeeper springmvc 集成

    在Dubbo中,Zookeeper常被用作服务注册中心,负责存储服务提供者的元数据信息,使服务消费者可以找到并调用相应服务。 SpringMVC是Spring框架的一部分,用于构建Web应用的模型-视图-控制器(MVC)架构。它简化了Web...

    Dubbo-Zookeeper-Netty-SpringMVC, 使用dubbo注册服务,netty做服务器,springmvc提供restful接口.zip

    在本项目"Dubbo-Zookeeper-Netty-SpringMVC"中,我们主要关注四个关键技术和框架的集成与应用。这四个技术分别是Dubbo、Zookeeper、Netty和SpringMVC,它们在分布式系统开发中各自扮演着重要的角色。让我们详细探讨...

    Dubbo与Zookeeper、SpringMVC整合和使用

    ### Dubbo与Zookeeper、SpringMVC整合和使用 随着互联网技术的发展,网站应用规模的扩大,传统的垂直架构已经难以满足需求,分布式服务架构成为解决大规模应用难题的关键方案之一。Dubbo作为一款分布式服务框架,...

    dubbo+zookeeper+spring+springMVC+mybatis

    `MyBatis`是一个SQL映射框架,它允许开发者将SQL语句直接写在XML配置文件或注解中,消除了DAO层的大量重复代码。通过`MyBatis`,开发者可以灵活地进行SQL操作,同时保持良好的编程习惯。 在项目构建过程中,通常会...

Global site tag (gtag.js) - Google Analytics