环境搭建 生产和消费 RestTemplate,底层源码解读
- SpringCloud环境搭建:生产和消费 RestTemplate
- SpringCloud的服务调用
- @SpringBootApplication
- 业务调用方法一: 通过静态工厂去拿
- 业务调用方法二: 通过注入依赖去拿
- Template的底层源码分析
SpringCloud环境搭建:生产和消费 RestTemplate
Spring章节复习已经过去,新的章节SpringCloud开始了,这个章节中将会回顾微服务相关
主要依照以下几个原则
- 每一个组件的Demo和Coding上传到我的代码仓库
- 在原有基础上加入一些设计模式,stream+lamdba等新的糖
- 通过DeBug调试,进入组件源码去分析底层运行的规则和设计模式
相关的代码已经上传到
链接: SpringCloudServiceDemo
可以进入master分支去看
SpringCloud的服务调用
需求分析
- 将两个模块:订单和用户信息
- 从订单 单体微服务中获取订单信息,包括用户信息
- 如何从订单 服务 去调取 用户信息那?
一般通过RestTemplate,这种就是通过RestFul风格调用url的方式进行微服务信息的传递
@Component
public class BeanFactory {
@Bean
public static RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Bean("curTemplate")
public RestTemplate RestTemplate(){
return new RestTemplate();
}
}
配置Bean,可以用过静态方法或者直接注入的方式拿到;
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
@SpringBootApplication
配置SpringBootApplication就是为
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
- @ComponentScan就是为AnnotationBeanFactory可以加载对应的主键
- @EnableAutoConfiguration扫描对应的包,自动配置信息,不需要手动配置 @Import(AutoConfigurationPackages.Registrar.class)
- @SpringBootConfiguration就是个@Configuration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
业务调用方法一: 通过静态工厂去拿
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
public Order queryOrderById(Long orderId) {
// 通过静态工厂去拿
Order order = orderMapper.findById(orderId);
String url = "http://localhost:8081/user/" + order.getUserId();;
order.setUser(BeanFactory.getRestTemplate().getForObject(url, User.class));
return order;
}
}
业务调用方法二: 通过注入依赖去拿
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
@Qualifier("curTemplate")
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 通过原生AutoWired去拿
Order order = orderMapper.findById(orderId);
String url = "http://localhost:8081/user/" + order.getUserId();
order.setUser(restTemplate.getForObject(url, User.class));
return order;
}
}
Template的底层源码分析
进行debug,加载源码包
配置断点
调用我们后端传入的url
创建一个工厂,存放url
工厂创建后,对request请求路径封装
这里的方法就是将请求转发过去,获取一个响应