草庐IT

day09-AOP-02

AOP-024.问题提出在上一篇的MyProxyProvider类中,我们的输出语句功能比较弱,在实际开发中,我们希望是以一个方法的形式,嵌入到真正执行的目标方法前,怎么办?1.使用土方法解决需求分析:使用土方法解决前面的问题,后面使用spring的aop组件完成改进MyProxyProvider:主要是对前置/返回/异常/最终通知的代码进行封装,封装到不同的方法中进行调用。packagecom.li.aop.proxy3;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.la

day28--Java泛型01

Java泛型011.泛型的理解和好处看一个需求:请编写程序,在ArrayList中添加三个Dog对象Dog对象含有name和age,并输出name和age(要求使用getXXX())先用传统的方法来解决--->引出泛型传统的方法:packageli.generic;importjava.util.ArrayList;@SuppressWarnings("all")publicclassIntroduce_{publicstaticvoidmain(String[]args){//用传统的方法来解决ArrayListarrayList=newArrayList();arrayList.add(n

day28--Java泛型01

Java泛型011.泛型的理解和好处看一个需求:请编写程序,在ArrayList中添加三个Dog对象Dog对象含有name和age,并输出name和age(要求使用getXXX())先用传统的方法来解决--->引出泛型传统的方法:packageli.generic;importjava.util.ArrayList;@SuppressWarnings("all")publicclassIntroduce_{publicstaticvoidmain(String[]args){//用传统的方法来解决ArrayListarrayList=newArrayList();arrayList.add(n

《RPC实战与核心原理》学习笔记Day11

13|优雅关闭:如何避免服务停机带来的业务损失?我们在RPC架构下,需要考虑当服务重启时,如何做到让调用方系统不出问题。当服务提供方要上线时,一般是通过部署系统完成实例重启,在这个过程汇总,服务提供方不会事先告诉调用方哪些实例会被重启,从而让调用方切换流量。而对调用方来说,它也无法预测服务提供方哪些实例会重启,因此负载均衡还是有可能降正在重启的实例挑选出来,这样导致请求被分发到正在重启的服务实例中,造成调用方无法拿到正确的响应结果。在服务重启的时候,对于调用方来说,有以下2种情况:调用方发请求前,目标服务已经下线。对于调用方来说,跟目标节点的连接会断开,这时调用可以立刻感知到,并在其健康列表中

《RPC实战与核心原理》学习笔记Day11

13|优雅关闭:如何避免服务停机带来的业务损失?我们在RPC架构下,需要考虑当服务重启时,如何做到让调用方系统不出问题。当服务提供方要上线时,一般是通过部署系统完成实例重启,在这个过程汇总,服务提供方不会事先告诉调用方哪些实例会被重启,从而让调用方切换流量。而对调用方来说,它也无法预测服务提供方哪些实例会重启,因此负载均衡还是有可能降正在重启的实例挑选出来,这样导致请求被分发到正在重启的服务实例中,造成调用方无法拿到正确的响应结果。在服务重启的时候,对于调用方来说,有以下2种情况:调用方发请求前,目标服务已经下线。对于调用方来说,跟目标节点的连接会断开,这时调用可以立刻感知到,并在其健康列表中

day12-实现Spring底层机制-02

实现Spring底层机制-023.实现任务阶段13.1知识拓展-类加载器Java的类加载器有三种:Bootstrap类加载器-----对应路径jre/libExt类加载器-----对应路径jre/lib/extApp类加载器-----对应路径classpathclasspath类路径,就是java.exe执行时,指定的路径。3.2分析阶段1目标:编写自己的spring容器,实现扫描包,得到bean的class对象3.3代码实现1.创建新的maven项目,注意把项目的languagelevel改为支持java8在pom.xml文件中指定编译版本:882.创建的架构如下:3.自定义Componen

day12-实现Spring底层机制-02

实现Spring底层机制-023.实现任务阶段13.1知识拓展-类加载器Java的类加载器有三种:Bootstrap类加载器-----对应路径jre/libExt类加载器-----对应路径jre/lib/extApp类加载器-----对应路径classpathclasspath类路径,就是java.exe执行时,指定的路径。3.2分析阶段1目标:编写自己的spring容器,实现扫描包,得到bean的class对象3.3代码实现1.创建新的maven项目,注意把项目的languagelevel改为支持java8在pom.xml文件中指定编译版本:882.创建的架构如下:3.自定义Componen

day13-实现Spring底层机制-03

实现Spring底层机制-037.阶段5-后置处理器的实现7.1分析阶段5目标:bean后置处理器的实现7.2代码实现新增:1.创建InitializingBean接口,实现该接口的Bean需要实现Bean的初始化方法bean后置处理器的两个方法,调用时机分别在Bean初始化方法的前后。因此要实现bean后置处理器,首先要实现Bean的初始化方法。可以参考原生Spring规范来定义这个接口packagecom.li.spring.processor;/***@author李*@version1.0*说明:*1.根据spring原生机制定义了一个接口*2.该接口有一个方法afterPropert

day13-实现Spring底层机制-03

实现Spring底层机制-037.阶段5-后置处理器的实现7.1分析阶段5目标:bean后置处理器的实现7.2代码实现新增:1.创建InitializingBean接口,实现该接口的Bean需要实现Bean的初始化方法bean后置处理器的两个方法,调用时机分别在Bean初始化方法的前后。因此要实现bean后置处理器,首先要实现Bean的初始化方法。可以参考原生Spring规范来定义这个接口packagecom.li.spring.processor;/***@author李*@version1.0*说明:*1.根据spring原生机制定义了一个接口*2.该接口有一个方法afterPropert

《RPC实战与核心原理》学习笔记Day12

15|熔断限流:业务如何实现自我保护?为什么我们的服务需要自我保护?RPC是解决分布式系统通信问题的一大利器,它会面临高并发的场景,这意味着我们提供服务的每个服务节点都有可能由于访问量过大而引起一系列的问题,例如业务处理耗时过长、CPU利用率过高、频繁FullGC以及服务进程直接宕机等,在生产环境中,我们要保证服务的稳定性和高可用性,这就需要业务进行自我保护,从而在高访问量、高并发的场景下,应用系统依然稳定,服务依然高可用。使用RPC时,业务如何实现自我保护?可以在服务提供方做限流操作,在服务调用方做熔断操作。熔断是调用方为了避免在调用过程中,服务提供方出现问题的时候,自身资源被耗尽的一种保护