Spring IOC 注入
第六章:Spring IoC 注入依赖注入的模式和类型模式手动模式 - 配置或者编程的方式,提前安排注入规则
XML 资源配置元信息
Java 注解配置元信息
API 配置元信息
自动模式 - 实现方提供依赖自动关联的方式,按照內建的注入规则
Autowiring(自动绑定)
自动绑定(Autowiring)自动绑定(Autowiring)模式自动绑定(Autowiring)限制和不足依赖注入方式Setter 方法依赖注入UserHolder注入User
1234567891011121314151617181920212223242526public class UserHolder { private User user; public UserHolder() { } public UserHolder(User user) { this.user = user; } public User getUser() { return user; ...
Spring IOC 依赖查找
依赖查找
单一依赖查找
延迟查找123456789@Bean@Primarypublic String hello(){ return "hello";}@Bean String hi(){ return "hi";}
12345public static void lookupByObjectProvider(AnnotationConfigApplicationContext context){ ObjectProvider<String> beanProvider = context.getBeanProvider(String.class); // ObjectProvider#getObject() 只能在只有一个String类型的单例时可以获取?添加@Primary注解即可 System.out.println(beanProvider.getObject()); }
集合类型依赖查询
层次性依赖查找
12345678Hie ...
Spring Bean基础
第四章:Spring Bean基础定义 Spring Bean什么是 BeanDefinition? BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口,包含:
Bean 的类名
Bean 行为配置元素,如作用域、自动绑定的模式,生命周期回调等
其他 Bean 引用,又可称作合作者(collaborators)或者依赖(dependencies)
配置设置,比如 Bean
BeanDefinition元信息
BeanDefinition 构建通过 BeanDefinitionBuilder
1234567891011public static void createByBeanDefinitionBuilder(){ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class); // 设置属性 beanDefinitionBuilder ...
Spring IoC 容器概览
第三章:Spring IoC 容器概览
1. Spring IoC 依赖查找123456789101112131415161718192021222324<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="user" class="com.cruise.thinking ...
常见面试题
1.微服务篇1.1.SpringCloud常见组件有哪些?问题说明:这个题目主要考察对SpringCloud的组件基本了解
难易程度:简单
参考话术:
SpringCloud包含的组件很多,有很多功能是重复的。其中最常用组件包括:
•注册中心组件:Eureka、Nacos等
•负载均衡组件:Ribbon
•远程调用组件:OpenFeign
•网关组件:Zuul、Gateway
•服务保护组件:Hystrix、Sentinel
•服务配置管理组件:SpringCloudConfig、Nacos
1.2.Nacos的服务注册表结构是怎样的?问题说明:考察对Nacos数据分级结构的了解,以及Nacos源码的掌握情况
难易程度:一般
参考话术:
Nacos采用了数据的分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。
对应到Java代码中,Nacos采用了一个多层的Map来表示 ...
Feign远程调用
Feign远程调用先来看我们以前利用RestTemplate发起远程调用的代码:
存在下面的问题:
•代码可读性差,编程体验不统一
•参数复杂URL难以维护
Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign
其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
Feign和OpenFeign两者区别
Feign替代RestTemplateFegin的使用步骤如下:
1)引入依赖我们在order-service服务的pom文件中引入feign的依赖:
1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2)添加注解在order-service的启动类添加注解开启Feign的功能:
3)编写Feign的客 ...
Nacos集群搭建
Nacos集群搭建1.集群结构图官方给出的Nacos集群图:
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
我们计划的集群结构:
三个nacos节点的地址:
节点
ip
port
nacos1
192.168.150.1
8845
nacos2
192.168.150.1
8846
nacos3
192.168.150.1
8847
2.搭建集群搭建集群的基本步骤:
搭建数据库,初始化数据库表结构
下载nacos安装包
配置nacos
启动nacos集群
nginx反向代理
2.1.初始化数据库Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
官方推荐的最佳实践是使用带有主从的高可用数据库集群
这里我们以单点的数据库为例来讲解。
首先新建一个数据库,命名为nacos,而后导入下面的SQL:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515 ...
Nacos服务配置
1.Nacos配置管理Nacos除了可以做注册中心,同样可以做配置管理来使用。
1.1.统一配置管理当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
1.1.1.在nacos中添加配置文件如何在nacos中管理配置呢?
然后在弹出的表单中,填写配置信息:
注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
1.1.2.从微服务拉取配置微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:
1)引入nacos-config依赖
首先,在user-servic ...