provider(生产者)
service注解暴露服务
/*** 用户管理实现类*/@Service//用的dubbo的注解,表明这是一个分布式服务
@Component //注册为spring bean
public class UserServiceImpl implementsUserService {
@AutowiredprivateUserMapper userMapper;
@Overridepublic ListlistUser() {
List result = new ArrayList<>();
List list =userMapper.listUser();for(User user : list) {
UserVO vo= newUserVO();
BeanUtils.copyProperties(user, vo);
result.add(vo);
}returnresult;
}
}
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 classUserBootStarter {public static voidmain(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 classUserManageController {
@ReferenceprivateUserService userService;/*** 查询用户集合
*@return
*/@RequestMapping("queryListUser")publicString queryListUser() {
List list =userService.listUser();returnlist.toString();
}
}
@Component:(把普通pojo实例化到spring容器中,相当于配置文件中的 ) 泛指各种组件,当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
例:上面的这个例子是引入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
@EnableDubbopublic classWebBootStarter {public static voidmain(String[] args) {
SpringApplication.run(WebBootStarter.class, args);
System.out.println("==========WEB模块启动完成!==========");
}
}
PS:@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。
调用服务
http://localhost:8081/userManage/queryListUser