org.springframework.stereotype.Service和com.alibaba.dubbo.config.annotation.Service两种service的区别

这两个Service,都可以在service类头上使用@Service的注解,于是我就写错了,查了半天才发现。

他们的区别大概是这个样子的:


org.springframework.stereotype.Service

org.springframework.stereotype.Service是spring的注解,用于标注业务层组件(service)。

标注了的组件需要在配置文件里有这样的配置<context:component-scan base-package="这里是包名" ></context:component-scan>


spring其他的一些差不多功能的注解还有这些:@Repository、@Controller、@Component。
@Service用于标注业务层组件(我们通常定义的service层就用这个)
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

另外还有其他几个用于注入的注解,他们是@Resource、@Autowired、@Qualifier

1,@Resource

     来自javax.annotation.Resource,属于javaEE,并不是spring中的,可以使用@Resource("xxx")来可以定义bean名称。

2,@Autowired

     来自org.springframework.beans.factory.annotation.Autowired这个包中,它是spring的包,没有@Autowired("xxx")这样的方式定义bean名称。

3,@Qualifier

     来自org.springframework.beans.factory.annotation.Qualifier,是spring中的注解,可以用@Qualifier("xxx"),在有多个实现的时候会用到。



com.alibaba.dubbo.config.annotation.Service
com.alibaba.dubbo.config.annotation.Service是dubbo用于声明provider的注解。
标注了这个注解的service需要在配置文件里添加这样的配置:<dubbo:annotation package="这里是包名" /> 

在dubbo中定义了4种关于provider和consumer的配置方式,分别是:
1. XML 配置文件方式。
   XML里配context:component-scan,dubbo:application,dubbo:registry,dubbo:protocol,dubbo:service或dubbo:reference。
2. properties 配置文件方式。
   XML里只剩下了dubbo:service或dubbo:reference,在property文件里配dubbo.application.name,dubbo.registry.address,dubbo.protocol.name,dubbo.protocol.port。
3. annotation 配置方式。

   配置文件中的dubbo:service或dubbo:reference统一替换成了dubbo:annotation,provider的实现类使用@Service注解,consumer中使用@Reference注解。

   另外,如果有加载context:component-scan的controller,那么dubbo:annotation的配置应在controller之前,否则provider的service会加载失败。

4. API 配置方式。

   API仅用于OpenAPI, ESB, Test, Mock等系统集成,配置是在代码中写死的,比如:ApplicationConfig.setName("xxx") 对应 <dubbo:application name="xxx" />


另外,如果既需要spring注入又需要当做provider,不能同时使用这两个service注解,因为同名不能import,真要用的话spring的那个可以换成@Component。

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
@org.springframework.stereotype.ServiceSpring框架中的一个注解,用于标注业务层组件(service)。它的作用是将一个类标识为Spring的服务层组件,让Spring能够自动扫描并将其实例化为Bean,以供其他组件使用。 在Spring框架中,使用@Service注解来标注业务层的实现类,它与其他注解(如@Controller、@Repository等)一样,都是通过@Component注解来实现的。@Service注解的作用是告诉Spring框架,被标注的类是业务层组件,需要被Spring进行管理。 使用@Service注解标注的类,可以通过依赖注入的方式使用,即其他组件可以直接使用@Autowired注解来注入@Service标注的业务层组件。而@Autowired注解则是Spring框架提供的一种自动装配的方式,它可以自动将标注了@Autowired注解的属性或构造函数参数与相应的Bean进行关联。在注入时,Spring会根据类型进行匹配,找到对应的Bean进行注入。 需要注意的是,如果一个类既需要被Spring注入,又需要被当做提供者(provider),那么不能同时使用@Service和@Component注解来标注该类。因为同名的注解不能重复导入。如果确实需要同时使用这两个注解,可以将@Spring注解替换成@Component注解。 总结起来,@org.springframework.stereotype.Service注解是Spring框架中用于标识业务层组件(service)的注解,它能够让Spring自动扫描并实例化标注了该注解的类,并且可以通过@Autowired注解进行依赖注入。同时,需要注意如果一个类既需要被Spring注入,又需要被当做提供者,不能同时使用@Service和@Component注解,需要将@Service替换成@Component注解。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值