dubbo学习(四)配置dubbo 注解方式配置

provider(生产者)

service注解暴露服务

/**
 * 用户管理实现类
 */
@Service //用的dubbo的注解,表明这是一个分布式服务
@Component //注册为spring bean
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<UserVO> listUser() {
        List<UserVO> result = new ArrayList<>();
        List<User> list = userMapper.listUser();
        for (User user : list) {
            UserVO vo = new UserVO();
            BeanUtils.copyProperties(user, vo);
            result.add(vo);
        }
        return result;
    }
}

PS:@Service注解很容易用错,目前有两个包有@Service注解:

com.alibaba.dubbo.config.annotation.Service:用于标注对外暴露的dubbo接口实现类。

org.springframework.stereotype.Service:用于标注根据业务块分离的Service的实现类,对应的是业务层(如一个dubbo方法可能调用多个业务块的service,这些service的实现类就用Spring的注解)。

PS:若使用的是dubbo的Service注解时,在controller注入的时候,要选择@Reference注解来进行注入。

dubbo配置

  在SpringBoot的配置文件application.yml中配置dubbo信息

dubbo:
  application:
    name: user-service
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    port: 20880
    name: dubbo

启动类配置

@SpringBootApplication
@EnableDubbo
@MapperScan(basePackages = "zhbf.user.mapper")//配置mapper扫描的路径(Mybatis的mapper接口)
public class UserBootStarter {

    public static void main(String[] args) {
        SpringApplication.run(UserBootStarter.class, args);
        System.out.println("==========USER模块启动完成!==========");
    }

}

  @Configuration:启动类注解。@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。

  @EnableDubbo:开启注解Dubbo功能 ,其中可以加入scanBasePackages属性配置包扫描的路径,用于扫描并注册bean

  @MapperScan:指定mybatis的mapper接口存放路径,用于扫描mapper接口并注册

consumer(消费者)

Reference注解引用服务

/**
 * 用户管理Controller
 */
@RestController
@RequestMapping(value = "/userManage")
public class UserManageController {

    @Reference
    private UserService userService;

    /**
     * 查询用户集合
     * @return
     */
    @RequestMapping("queryListUser")
    public String queryListUser() {
        List<UserVO> list = userService.listUser();
        return list.toString();
    }
}

  @Component:(把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>) 泛指各种组件,当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

例:<context:component-scan base-package=”com.*”> 
上面的这个例子是引入Component组件的例子,其中base-package表示为需要扫描的所有子包。 

  @Reference:与@Autowired、@Resource注解功能类似,用于依赖注入,一般注入的是分布式的远程服务的对象,需要dubbo配置使用

dubbo配置

  在SpringBoot的配置文件application.yml中配置dubbo信息(这里以application.properties举例)

# dubbo配置
dubbo.application.name=web-service
dubbo.registry.address=zookeeper://127.0.0.1:2181 

启动类配置

@SpringBootApplication
@EnableDubbo
public class WebBootStarter {

    public static void main(String[] args) {
        SpringApplication.run(WebBootStarter.class, args);
        System.out.println("==========WEB模块启动完成!==========");
    }

}

PS:@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。

调用服务

  http://localhost:8081/userManage/queryListUser

posted @ 2019-07-21 17:40  有梦想的肥宅  阅读(18111)  评论(0编辑  收藏  举报