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