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