From 24452c41d51a534dc95d5d3bdd42b155afccbdd9 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Wed, 24 Aug 2022 20:04:41 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84](master):?= =?UTF-8?q?=20Java=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Java一般错误优化解决 --- code-language/java/README.md | 881 +++++++++++++++++++++- code-language/java/java-demo/pom.xml | 28 + code-language/java/pic/Spring类初始化.png | Bin 0 -> 127353 bytes pom.xml | 1 + 4 files changed, 903 insertions(+), 7 deletions(-) create mode 100644 code-language/java/java-demo/pom.xml create mode 100644 code-language/java/pic/Spring类初始化.png diff --git a/code-language/java/README.md b/code-language/java/README.md index 182c362..f149ca5 100644 --- a/code-language/java/README.md +++ b/code-language/java/README.md @@ -5,12 +5,12 @@ ## 0. 目录 -Java并发编程 - - -Spring 常见错误笔记 - - +- Java并发编程 +- Spring 常见错误笔记 +- 业务编写之坑 + - 代码编写常见问题 + - 代码设计常见问题 + - 安全常见问题 ## 2. Spring 常见错误笔记 @@ -253,7 +253,7 @@ public class HelloWorldController { - 条件的成立在于解析 HelloWorldController 这个 Bean 时,我们会发现有方法标记了 Lookup,此时就会添加相应方法到属性 methodOverrides 里面去 (此过程由AutowiredAnnotationBeanPostProcessor#determineCandidateConstructors 完成) -### 2.1 Spring Core - Spring Bean 依赖注入常见错误 +### 2.2 Spring Core - Spring Bean 依赖注入常见错误 - Spring @Autowired “控制反转、依赖注入” #### A. 案例 1:过多赠予,无所适从 - @Autowired 时,不管你是菜鸟级还是专家级的 Spring 使用者,都应该制造或者遭遇过类似的错误: @@ -552,14 +552,881 @@ DataService innerClassDataService; ``` - 这个引用看起来有些许奇怪,但实际上是可以工作的,反而直接使用innerClassDataService 来引用倒是真的不可行。 - **对源码的学习是否全面决定了我们以后犯错的可能性大小** + +#### D. @Value 没有注入预期的值 +- @Value 必须指定一个字符串值,因为其定义做了要求,定义代码如下: +```java +public @interface Value { + /** + * The actual value expression — for example, #{systemPropertie + */ + String value(); +} +``` +- 我们一般都会因为 @Value 常用于 String 类型的装配而误以为 @Value 不能用于非内置对象的装配,实际上这是一个常见的误区 +- 例如,我们可以使用下面这种方式来 Autowired 一个属性成员: +```java +@Value("#{student}") +private Student student; +``` +- 其中 student 这个 Bean 定义如下: +```java +@Bean +public Student student(){ + Student student = createStudent(1, "xie"); + return student; +} +``` +- 使用 @Value 更多是用来装配 String,而且它支持多种强大的装配方式,典型的方式参考下面的示例: +```java +//注册正常字符串 +@Value("我是字符串") +private String text; + +//注入系统参数、环境变量或者配置文件中的值 +@Value("${ip}") +private String ip + +//注入其他Bean属性,其中student为bean的ID,name为其属性 +@Value("#{student.name}") +private String name; +``` +- **异常案例** +- application.properties +```properties +username=admin +password=pass +``` +```java +@RestController +@Slf4j +public class ValueTestController { + @Value("${username}") + private String username; + @Value("${password}") + private String password; + + @RequestMapping(path = "user", method = RequestMethod.GET) + public String getUser(){ + return username + ":" + password; + } +} +``` +- 我们去打印上述代码中的 username 和 password 时,我们会发现 password 正确返回了,但是 username 返回的并不是配置文件中指明的 admin +- **案例解析** +- Spring 是如何根据 @Value 来查询“值”的 +- 通过方法 DefaultListableBeanFactory#doResolveDependency 来了解 @Value 的核心工作流程,代码如下: +```java +@Nullable +public Object doResolveDependency(DependencyDescriptor descriptor, @Nullable String beanName, +@Nullable Set autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException { + + // ... + + Class type = descriptor.getDependencyType(); + // 寻找 @Value + Object value = getAutowireCandidateResolver().getSuggestedValue(descriptor); + if (value != null) { + if (value instanceof String) { + // 解析 @Value + String strVal = resolveEmbeddedValue((String) value); + BeanDefinition bd = (beanName != null && containsBean(beanName) ? + getMergedBeanDefinition(beanName) : null); + value = evaluateBeanDefinitionString(strVal, bd); + } + + // 转化 Value 解析的结果到装配的类型 + TypeConverter converter = (typeConverter != null ? typeConverter : getTypeConverter()); + try { + return converter.convertIfNecessary(value, type, descriptor.getTypeDescriptor()); + } + catch (UnsupportedOperationException ex) { + // 异常处理 + } + } + + // ... + } +``` +- @Value 的工作大体分为以下三个核心步骤。 +- 寻找 @Value,在这步中,主要是判断这个属性字段是否标记为 @Value +- 依据的方法参考 QualifierAnnotationAutowireCandidateResolver#findValue: +```java + @Nullable + protected Object findValue(Annotation[] annotationsToSearch) { + if (annotationsToSearch.length > 0) { // qualifier annotations have to be local + AnnotationAttributes attr = AnnotatedElementUtils.getMergedAnnotationAttributes( + AnnotatedElementUtils.forAnnotations(annotationsToSearch), this.valueAnnotationType); + //valueAnnotationType即为@Value + if (attr != null) { + return extractValue(attr); + } + } + return null; + } +``` +- 解析 @Value 的字符串值 +- 如果一个字段标记了 @Value,则可以拿到对应的字符串值,然后就可以根据字符串值去做解析,最终解析的结果可能是一个字符串,也可能是一个对象,这取决于字符串怎么写。 + +- 将解析结果转化为要装配的对象的类型 +- 当拿到第二步生成的结果后,我们会发现可能和我们要装配的类型不匹配。假设我们定义的是 UUID,而我们获取的结果是一个字符串,那么这个时候就会根据目标类型来寻找转 + 化器执行转化,字符串到 UUID 的转化实际上发生在 UUIDEditor 中: +```java +public class UUIDEditor extends PropertyEditorSupport { + @Override + public void setAsText(String text) throws IllegalArgumentException + if (StringUtils.hasText(text)) { + //转化操作 + setValue(UUID.fromString(text.trim())); + }else { + setValue(null); + } +} + //... +} +``` +- 解析 Value 指定字符串过程 +```java +String strVal = resolveEmbeddedValue((String) value); +``` +- 这里其实是在解析嵌入的值,实际上就是“替换占位符”工作。具体而言,它采用的是PropertySourcesPlaceholderConfigurer 根据 PropertySources 来替换。 +- 不过当使用${username} 来获取替换值时,其最终执行的查找并不是局限在 application.property 文件中的。 + +- 而具体的查找执行,我们可以通过下面的代码 (PropertySourcesPropertyResolver#getProperty)来获取它的执行方式: +```java + @Nullable + protected T getProperty(String key, Class targetValueType, boolean resolveNestedPlaceholders) { + if (this.propertySources != null) { + for (PropertySource propertySource : this.propertySources) { + if (logger.isTraceEnabled()) { + logger.trace("Searching for key '" + key + "' in PropertySource '" + + propertySource.getName() + "'"); + } + Object value = propertySource.getProperty(key); + if (value != null) { + if (resolveNestedPlaceholders && value instanceof String) { + value = resolveNestedPlaceholders((String) value); + } + logKeyFound(key, propertySource, value); + // 查到 Value 就退出 + return convertValueIfNecessary(value, targetValueType); + } + } + } + if (logger.isTraceEnabled()) { + logger.trace("Could not find key '" + key + "' in any property source"); + } + return null; + } +``` +- 在解析 Value 字符串时,其实是有顺序的(查找的源是存在CopyOnWriteArrayList 中,在启动时就被有序固定下来),一个一个“源”执行查找。在其中一个源找到后,就可以直接返回了。 +- 查看 systemEnvironment 这个源,会发现刚好有一个 username 和我们是重合的,且值不是 pass。 + +- 刚好系统环境变量(systemEnvironment)中含有同名的配置。实际上,对于系统参数(systemProperties)也是一样的,这些参数或者变量都有很多,如果我们没有意识到它 + 的存在,起了一个同名的字符串作为 @Value 的值,则很容易引发这类问题。 +- **问题修正** +- 一定要注意**不仅要避免和环境变量冲突,也要注意避免和系统变量等其他变量冲突** + +#### E. 错乱的注入集合 +- 集合类型的自动注入是 Spring 提供的另外一个强大功能。 +- 存在多个学生 Bean,我们需要找出来,并存储到一个 List里面去。多个学生 Bean 的定义如下: +```java +@Bean +public Student student1(){ + return createStudent(1, "xie"); +} + +@Bean +public Student student2(){ + return createStudent(2, "fang"); +} +private Student createStudent(int id, String name) { + Student student = new Student(); + student.setId(id); + student.setName(name); + return student; +} +``` +- 有了集合类型的自动注入后,我们就可以把零散的学生 Bean 收集起来了,代码示例如 +```java +@RestController +@Slf4j +public class StudentController { +private List students; +public StudentController(List students){ + this.students = students; +} +@RequestMapping(path = "students", method = RequestMethod.GET) +public String listStudents(){ + return students.toString(); +} +} +``` +- 通过上述代码,我们就可以完成集合类型的注入工作,输出结果如下: +> [Student(id=1, name=xie), Student(id=2, name=fang)] +- 当我们持续增加一些 student 时,可能就不喜欢用这种方式来注入集合类型了,而是倾向于用下面的方式去完成注入工作: +```java +@Bean +public List students(){ + Student student3 = createStudent(3, "liu"); + Student student4 = createStudent(4, "fu"); + return Arrays.asList(student3, student4); +} +``` +- 我们不妨将上面这种方式命名为“直接装配方式”,而将之前的那种命名为“收集方式”。 +- 如果我们不小心让这 2 种方式同时存在了,结果会怎样? +- 然而,当我们运行起程序,就会发现后面的注入方式根本没有生效。即依然返回的是前面定义的 2 个学生。为什么会出现这样的错误呢? + +- **案例解析** +- 收集装配风格,Spring 使用的是 DefaultListableBeanFactory#resolveMultipleBeans +```java +@Nullable + private Object resolveMultipleBeans(DependencyDescriptor descriptor, @Nullable String beanName, + @Nullable Set autowiredBeanNames, @Nullable TypeConverter typeConverter) { + + Class type = descriptor.getDependencyType(); + + if (descriptor instanceof StreamDependencyDescriptor) { + // 装配 stream + Map matchingBeans = findAutowireCandidates(beanName, type, descriptor); + if (autowiredBeanNames != null) { + autowiredBeanNames.addAll(matchingBeans.keySet()); + } + Stream stream = matchingBeans.keySet().stream() + .map(name -> descriptor.resolveCandidate(name, type, this)) + .filter(bean -> !(bean instanceof NullBean)); + if (((StreamDependencyDescriptor) descriptor).isOrdered()) { + stream = stream.sorted(adaptOrderComparator(matchingBeans)); + } + return stream; + } + else if (type.isArray()) { + // 装配 数组 + Class componentType = type.getComponentType(); + ResolvableType resolvableType = descriptor.getResolvableType(); + Class resolvedArrayType = resolvableType.resolve(type); + if (resolvedArrayType != type) { + componentType = resolvableType.getComponentType().resolve(); + } + if (componentType == null) { + return null; + } + Map matchingBeans = findAutowireCandidates(beanName, componentType, + new MultiElementDescriptor(descriptor)); + if (matchingBeans.isEmpty()) { + return null; + } + if (autowiredBeanNames != null) { + autowiredBeanNames.addAll(matchingBeans.keySet()); + } + TypeConverter converter = (typeConverter != null ? typeConverter : getTypeConverter()); + Object result = converter.convertIfNecessary(matchingBeans.values(), resolvedArrayType); + if (result instanceof Object[]) { + Comparator comparator = adaptDependencyComparator(matchingBeans); + if (comparator != null) { + Arrays.sort((Object[]) result, comparator); + } + } + return result; + } + else if (Collection.class.isAssignableFrom(type) && type.isInterface()) { + //装配集合 + //获取集合的元素类型 + Class elementType = descriptor.getResolvableType().asCollection().resolveGeneric(); + if (elementType == null) { + return null; + } + // 根据元素类型查找所有的bean + Map matchingBeans = findAutowireCandidates(beanName, elementType, + new MultiElementDescriptor(descriptor)); + if (matchingBeans.isEmpty()) { + return null; + } + if (autowiredBeanNames != null) { + autowiredBeanNames.addAll(matchingBeans.keySet()); + } + // 转化查到的所有bean放置到集合并返回 + TypeConverter converter = (typeConverter != null ? typeConverter : getTypeConverter()); + Object result = converter.convertIfNecessary(matchingBeans.values(), type); + // ... + return result; + } + else if (Map.class == type) { + // 解析map + // ... + return matchingBeans; + } + else { + return null; + } + } +``` +- 到这,我们就不难概括出这种收集式集合装配方式的大体过程了 +- 1- 获取集合类型的元素类型 + - 目标类型定义为 List students,所以元素类型为 Student,获取的具体方法参考代码行: + - Class elementType = descriptor.getResolvableType().asCollection().resolveGeneric(); +- 2- 根据元素类型,找出所有的 Bean + - 有了上面的元素类型,即可根据元素类型来找出所有的 Bean,关键代码行如下: + - Map matchingBeans = findAutowireCandidates(beanName,elementType, new MultiElementDescriptor(descriptor)); +- 3- 将匹配的所有的 Bean 按目标类型进行转化 + - 经过步骤 2,我们获取的所有的 Bean 都是以 java.util.LinkedHashMap.LinkedValues 形式存储的,和我们的目标类型大概率不同,所以最后一步需要做的是按需转化。 + - 中,我们就需要把它转化为 List,转化的关键代码如下: + - Object result = converter.convertIfNecessary(matchingBeans.values(), type); +- 两种装配集合的方式是不能同存的,结合本案例,当使用收集装配方式来装配时,能找到任何一个对应的 Bean,则返回,如果一个都没有找到,才会采用直接装配的方式。 + +- **问题修复** +- **在对于同一个集合对象的注入上,混合多种注入方式是不可取的,这样除了错乱,别无所得。** + +### 2.3 Spring Core - Spring Bean生命周期常见错误 + +#### A. 构造器内抛空指针异常 +- 在构建宿舍管理系统时,有 LightMgrService 来管理 LightService,从而控制宿舍灯的开启和关闭。我们希望在 LightMgrService 初始化时能够自动调用 + LightService 的 check 方法来检查所有宿舍灯的电路是否正常,代码如下: +```java +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +@Component +public class LightMgrService { +@Autowired +private LightService lightService; + +public LightMgrService() { + lightService.check(); +} +} +``` +- 我们在 LightMgrService 的默认构造器中调用了通过 @Autoware 注入的成员变量 +- LightService 的 check 方法: +```java +@Service +public class LightService { + public void start() { + System.out.println("turn on all lights"); + } + public void shutdown() { + System.out.println("turn off all lights"); + } + public void check() { + System.out.println("check all lights"); + } +} +``` +- 以上代码定义了 LightService 对象的原始类。 +- 从整个案例代码实现来看,我们的期待是在 LightMgrService 初始化过程中,LightService 因为标记为 @Autowired,所以能被自动装配好;然后在 LightMgrService + 的构造器执行中,LightService 的 shutdown() 方法能被自动调用;最终打印出 check all lights。 +- 然而事与愿违,我们得到的只会是 NullPointerException +- **案例解析** +- Spring 类初始化过程没有足够的了解 +- ![Spring类初始化](pic/Spring类初始化.png) +- 这个图初看起来复杂,我们不妨将其分为三部分: + - 第一部分,将一些必要的系统类,比如 Bean 的后置处理器类,注册到 Spring 容器,其中就包括我们这节课关注的 CommonAnnotationBeanPostProcessor 类; + - 第二部分,将这些后置处理器实例化,并注册到 Spring 的容器中; + - 第三部分,实例化所有用户定制类,调用后置处理器进行辅助装配、类初始化等等。 +- 第一部分和第二部分并非是我们今天要讨论的重点,这里仅仅是为了让你知道CommonAnnotationBeanPostProcessor 这个后置处理类是何时被 Spring 加载和实例化的。 +- 拓展两个知识点: + - 很多必要的系统类,尤其是 Bean 后置处理器(比如CommonAnnotationBeanPostProcessor、AutowiredAnnotationBeanPostProcessor 等),都是被 Spring 统一加载和管理的, + 并在 Spring 中扮演了非常重要的角色; + - 通过 Bean 后置处理器,Spring 能够非常灵活地在不同的场景调用不同的后置处理器,比如接下来我会讲到示例问题如何修正,修正方案中提到的 PostConstruct 注解,它的处理逻辑就需要用到 + CommonAnnotationBeanPostProcessor(继承自InitDestroyAnnotationBeanPostProcessor)这个后置处理器。 +- 我们重点看下第三部分,即 Spring 初始化单例类的一般过程,基本都是 getBean()->doGetBean()->getSingleton(),如果发现 Bean 不存在,则调用 createBean()- + doCreateBean() 进行实例化 +- 查看 doCreateBean() 的源代码如下: +- Bean 初始化的三个关键步骤 + - createBeanInstance 实例化 Bean + - populateBean 注入 Bean 依赖 + - initializeBean 初始化 Bean +- 执行 @PostConstruct 标记的方法 这三个功能,这也和上述时序图的流程相符。 + +- 而用来实例化 Bean 的 createBeanInstance 方法通过依次调用 DefaultListableBeanFactory.instantiateBean() > SimpleInstantiationStrategy.instantiate(),最终执行到 + BeanUtils.instantiateClass() +- 这里因为当前的语言并非 Kotlin,所以最终将调用 ctor.newInstance() 方法实例化用户定制类 LightMgrService,而默认构造器显然是在类实例化的时候被自动调用的,Spring 也 + 无法控制。而此时负责自动装配的 populateBean 方法还没有被执行,LightMgrService 的属性 LightService 还是 null,因而得到空指针异常也在情理之中。 +- **问题修正** +- 问题根源: **使用 @Autowired 直接标记在成员属性上而引发的装配行为是发生在构造器执行之后的** +- **修正代码1** +```java +@Component +public class LightMgrService { + private LightService lightService; + + public LightMgrService(LightService lightService) { + this.lightService = lightService; + lightService.check(); + } +} +``` +- 当使用上面的代码时,构造器参数 LightService 会被自动注入 LightService 的 Bean,从而在构造器执行时,不会出现空指针。可以说,**使用构造器参数来隐式注入**是一种 Spring 最佳实践 + +- **修正代码2** +- 添加 init 方法,并且使用 PostConstruct 注解进行修饰: +```java +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +@Component +public class LightMgrService { + @Autowired + private LightService lightService; + + @PostConstruct + public void init() { + lightService.check(); + } +} +``` +- - **修正代码3** +- 实现 InitializingBean 接口,在其 afterPropertiesSet() 方法中执行初始化代码: +```java +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +@Component +public class LightMgrService implements InitializingBean { + @Autowired + private LightService lightService; + + @Override + public void afterPropertiesSet() throws Exception { + lightService.check(); + } +} +``` +- 后续的两种方案并不是最优的,但是在一些场景下,这两种方案各有所长 + +#### B. 意外触发 shutdown 方法 +- 在类销毁时,也会有一些相对隐蔽的约定,导致一些难以察觉的错误 +- 我们可能会去掉 @Service 注解,而是使用另外一种产生 Bean 的方式:创建一个配置类 BeanConfiguration(标记 @Configuration)来创建一堆 Bean,其中就 + 包含了创建 LightService 类型的 Bean,并将其注册到 Spring 容器: +```java +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class BeanConfiguration { + @Bean + public LightService getTransmission(){ + return new LightService(); + } +} +``` +- 复用案例 1 的启动程序,稍作修改,让 Spring 启动完成后立马关闭当前 Spring 上下文这样等同于模拟宿舍管理系统的启停: +```java +@SpringBootApplication +public class Application { +public static void main(String[] args) { + ConfigurableApplicationContext context = SpringApplication.run(Applica + context.close(); +} +} +``` +- 以上代码没有其他任何方法的调用,仅仅是将所有符合约定的类初始化并加载到 Spring 容器,完成后再关闭当前的 Spring 容器。 +- 按照预期,这段代码运行后不会有任何的 log 输出,毕竟我们只是改变了 Bean 的产生方式。 +- 但实际运行这段代码后,我们可以看到控制台上打印了 shutting down all lights。显然shutdown 方法未按照预期被执行了,这导致一个很有意思的 bug:在使用新的 Bean 生 + 成方式之前,每一次宿舍管理服务被重启时,宿舍里所有的灯都不会被关闭。但是修改后,只有服务重启,灯都被意外关闭了。如何理解这个 bug? + +- **问题解析** +- TODO 后续补充源码跟进 + +- **问题修正** +- 我们可以通过避免在 Java 类中定义一些带有特殊意义动词的方法来解决,当然如果一定要定义名为 close 或者 shutdown 方法,也可以通过将 Bean 注解内 destroyMethod 属性 + 设置为空的方式来解决这个问题。 +- 第一种修改方式比较简单,所以这里只展示第二种修改方式,代码如下: +```java +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class BeanConfiguration { + + @Bean(destroyMethod="") + public LightService getTransmission(){ + return new LightService(); + } +} +``` + + +## 3. 业务编写之坑 + +### 3.1 + + +### 3.21 设计 - 代码重复:搞定代码重复的三个绝招 +- 涉及知识: 设计模式、Java 高级特性、OOP + +#### A. 利用工厂模式 + 模板方法模式,消除 if…else 和重复代码 +- 业务模拟背景 + - 假设要开发一个购物车下单的功能,针对不同用户进行不同处理: + - 普通用户需要收取运费,运费是商品价格的 10%,无商品折扣; + - VIP 用户同样需要收取商品价格 10% 的快递费,但购买两件以上相同商品时,第三件开始享受一定折扣; + - 内部用户可以免运费,无商品折扣 + - 目标 + - 实现三种类型的购物车业务逻辑,把入参 Map 对象(Key 是商品 ID,Value是商品数量),转换为出参购物车类型 Cart。 +```java +//购物车 +@Data +public class Cart { + //商品清单 + private List items = new ArrayList<>(); + //总优惠 + private BigDecimal totalDiscount; + //商品总价 + private BigDecimal totalItemPrice; + //总运费 + private BigDecimal totalDeliveryPrice; + //应付总价 + private BigDecimal payPrice; +} +//购物车中的商品 +@Data +public class Item { + //商品ID + private long id; + //商品数量 + private int quantity; + //商品单价 + private BigDecimal price; + //商品优惠 + private BigDecimal couponPrice; + //商品运费 + private BigDecimal deliveryPrice; +} +//普通用户购物车处理 +public class NormalUserCart { + public Cart process(long userId, Map items) { + Cart cart = new Cart(); + //把Map的购物车转换为Item列表 + List itemList = new ArrayList<>(); + items.entrySet().stream().forEach(entry -> { + Item item = new Item(); + item.setId(entry.getKey()); + item.setPrice(Db.getItemPrice(entry.getKey())); + item.setQuantity(entry.getValue()); + itemList.add(item); + }); + cart.setItems(itemList); + + //处理运费和商品优惠 + itemList.stream().forEach(item -> { + //运费为商品总价的10% + item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(i + //无优惠 + item.setCouponPrice(BigDecimal.ZERO); + }); + + //计算商品总价 + cart.setTotalItemPrice(cart.getItems().stream().map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))).reduce(BigDecimal.ZERO, BigDecimal::add)); + //计算总运费 + cart.setTotalDeliveryPrice(cart.getItems().stream().map(Item::getDeliveryPrice).reduce(BigDecimal.ZERO, BigDecimal::add)); + //计算总折扣 + cart.setTotalDiscount(cart.getItems().stream().map(Item::getCouponPrice).reduce(BigDecimal.ZERO, BigDecimal::add)); + // 计算应付价格 + cart.setPayPrice(cart.getTotalItemPrice().add(cart.getTotalDeliveryPrice()).subtract(cart.getTotalDiscount())); + return cart; +``` +- 然后实现针对 VIP 用户的购物车逻辑。与普通用户购物车逻辑的不同在于,VIP 用户能享受同类商品多买的折扣。所以,这部分代码只需要额外处理多买折扣部分 + +```java +public class VipUserCart { + public Cart process(long userId, Map items) { + ... + itemList.stream().forEach(item -> { + //运费为商品总价的10% + item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(i)) + //购买两件以上相同商品,第三件开始享受一定折扣 + if (item.getQuantity() > 2) { + item.setCouponPrice(item.getPrice() + .multiply(BigDecimal.valueOf(100 - Db.getUserCouponPerce)) + .multiply(BigDecimal.valueOf(item.getQuantity() - 2))); + } else { + item.setCouponPrice(BigDecimal.ZERO); + } + }); + ... + return cart; + } +} +``` +- 最后是免运费、无折扣的内部用户,同样只是处理商品折扣和运费时的逻辑差异: +```java +public class InternalUserCart { +public Cart process(long userId, Map items) { + ... + itemList.stream().forEach(item -> { + //免运费 + item.setDeliveryPrice(BigDecimal.ZERO); + //无优惠 + item.setCouponPrice(BigDecimal.ZERO); + }); + ... + return cart; +} +} +``` +- **分析上述坏代码**: +- 对比一下代码量可以发现,三种购物车 70% 的代码是重复的。原因很简单,虽然不同类型用户计算运费和优惠的方式不同,但整个购物车的初始化、统计总价、总运费、总优惠和支 + 付价格的逻辑都是一样的。 +- 代码重复本身不可怕,可怕的是漏改或改错。比如,写 VIP 用户购物车的同学发现商品总价计算有 Bug,不应该是把所有 Item 的 price 加在一起,而是应该把所有 Item + 的 price*quantity 加在一起。这时,他可能会只修改 VIP 用户购物车的代码,而忽略了普通用户、内部用户的购物车中,重复的逻辑实现也有相同的 Bug +- 有了三个购物车后,我们就需要根据不同的用户类型使用不同的购物车了。如下代码所示,使用三个 if 实现不同类型用户调用不同购物车的 process 方法: + +```java +@GetMapping("wrong") +public Cart wrong(@RequestParam("userId") int userId) { +//根据用户ID获得用户类型 +String userCategory = Db.getUserCategory(userId); +//普通用户处理逻辑 +if (userCategory.equals("Normal")) { + NormalUserCart normalUserCart = new NormalUserCart(); + return normalUserCart.process(userId, items); +} +//VIP用户处理逻辑 +if (userCategory.equals("Vip")) { + VipUserCart vipUserCart = new VipUserCart(); + return vipUserCart.process(userId, items); +} +//内部用户处理逻辑 +if (userCategory.equals("Internal")) { + InternalUserCart internalUserCart = new InternalUserCart(); + return internalUserCart.process(userId, items); +} +return null; +} +``` +- 电商的营销玩法是多样的,以后势必还会有更多用户类型,需要更多的购物车。我们就只能不断增加更多的购物车类,一遍一遍地写重复的购物车逻辑、写更多的 if 逻辑 + +- **改进措施** +- 抽象类和抽象方法的定义的话,这时或许就会想到,是否可以把重复的逻辑定义在抽象类中,三个购物车只要分别实现不同的那份逻辑 +- 这个模式就是**模板方法模式** +- 在父类中实现了购物车处理的流程模板,然后把需要特殊处理的地方留空白也就是留抽象方法定义,让子类去实现其中的逻辑。由于父类的辑不完整无法单独工作,因此需要定义为抽象类。 + +- 如下代码所示,AbstractCart 抽象类实现了购物车通用的逻辑,额外定义了两个抽象方法让子类去实现。其中,processCouponPrice 方法用于计算商品折扣,processDeliveryPrice 方法用于计算运费。 +```java +public abstract class AbstractCart { + //处理购物车的大量重复逻辑在父类实现 + public Cart process(long userId, Map items) { + Cart cart = new Cart(); + List itemList = new ArrayList<>(); + items.entrySet().stream().forEach(entry -> { + Item item = new Item(); + item.setId(entry.getKey()); + item.setPrice(Db.getItemPrice(entry.getKey())); + item.setQuantity(entry.getValue()); + itemList.add(item); + }); + cart.setItems(itemList); + + //让子类处理每一个商品的优惠 + itemList.stream().forEach(item -> { + processCouponPrice(userId, item); + processDeliveryPrice(userId, item); + }); + //计算商品总价 + cart.setTotalItemPrice(cart.getItems().stream().map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))).reduce(BigDecimal.ZERO, BigDecimal::add)); + //计算总运费 + cart.setTotalDeliveryPrice(cart.getItems().stream().map(Item::getDeliveryPrice).reduce(BigDecimal.ZERO, BigDecimal::add)); + //计算总折扣 + cart.setTotalDiscount(cart.getItems().stream().map(Item::getCouponPrice).reduce(BigDecimal.ZERO, BigDecimal::add)); + // 计算应付价格 + cart.setPayPrice(cart.getTotalItemPrice().add(cart.getTotalDeliveryPrice()).subtract(cart.getTotalDiscount())); + + return cart; + } + //处理商品优惠的逻辑留给子类实现 + protected abstract void processCouponPrice(long userId, Item item); + //处理配送费的逻辑留给子类实现 + protected abstract void processDeliveryPrice(long userId, Item item); +} +``` +- 有了这个抽象类,三个子类的实现就非常简单了。普通用户的购物车 NormalUserCart,实现的是 0 优惠和 10% 运费的逻辑: +```java +@Service(value = "NormalUserCart") +public class NormalUserCart extends AbstractCart { + + @Override + protected void processCouponPrice(long userId, Item item) { + item.setCouponPrice(BigDecimal.ZERO); + } + + @Override + protected void processDeliveryPrice(long userId, Item item) { + item.setDeliveryPrice(item.getPrice() + .multiply(BigDecimal.valueOf(item.getQuantity())) + .multiply(new BigDecimal("0.1"))); + } +} +``` +- VIP 用户的购物车 VipUserCart,直接继承了 NormalUserCart,只需要修改多买优惠策略: +```java +@Service(value = "VipUserCart") +public class VipUserCart extends NormalUserCart { + @Override + protected void processCouponPrice(long userId, Item item) { + if (item.getQuantity() > 2) { + item.setCouponPrice(item.getPrice() + .multiply(BigDecimal.valueOf(100 - Db.getUserCouponPercent(userId)).divide(new BigDecimal("100"))) + .multiply(BigDecimal.valueOf(item.getQuantity() - 2))); + }else { + item.setCouponPrice(BigDecimal.ZERO); + } + } +} +``` +- 内部用户购物车 InternalUserCart 是最简单的,直接设置 0 运费和 0 折扣即可: +```java +@Service(value = "InternalUserCart") +public class InternalUserCart extends AbstractCart { + @Override + protected void processCouponPrice(long userId, Item item) { + item.setCouponPrice(BigDecimal.ZERO); + } + + @Override + protected void processDeliveryPrice(long userId, Item item) { + item.setDeliveryPrice(BigDecimal.ZERO); + } +} +``` +- 接下来,我们再看看如何能避免三个 if 逻辑 +- 定义三个购物车子类时,我们在 @Service 注解中对 Bean 进行了命名。既然三个购物车都叫 XXXUserCart,那我们就可以把用户类型字符串拼接 UserCart + 构成购物车 Bean 的名称,然后利用 Spring 的 IoC 容器,通过 Bean 的名称直接获取到AbstractCart,调用其 process 方法即可实现通用。 + 这就是**工厂模式**,只不过是借助 Spring 容器实现罢了: +```java +@GetMapping("right") +public Cart right(@RequestParam("userId") int userId) { + String userCategory = Db.getUserCategory(userId); + AbstractCart cart = (AbstractCart) applicationContext.getBean(userCategory + "UserCart"); + return cart.process(userId, items); +} +``` +- 之后如果有了新的用户类型、新的用户逻辑,完全不用对代码做任何修改,只要新增一个 XXXUserCart 类继承 AbstractCart,实现特殊的优惠和运费处理逻辑就可以了 +- 我们就利用**工厂模式 + 模板方法模式**,不仅消除了重复代码,还避免了修改既有代码的风险 +- 这就是设计模式中的开闭原则:对修改关闭,对扩展开放 + +#### B. 利用注解 + 反射消除重复代码 +- 再看一个三方接口的调用案例,同样也是一个普通的业务逻辑 +- 假设银行提供了一些 API 接口,对参数的序列化有点特殊,不使用 JSON,而是需要我们把参数依次拼在一起构成一个大字符串 +- 按照银行提供的 API 文档的顺序,把所有参数构成定长的数据,然后拼接在一起作为整个字符串。 +- 因为每一种参数都有固定长度,未达到长度时需要做填充处理: + - 字符串类型的参数不满长度部分需要以下划线右填充,也就是字符串内容靠左; + - 数字类型的参数不满长度部分以 0 左填充,也就是实际数字靠右; + - 货币类型的表示需要把金额向下舍入 2 位到分,以分为单位,作为数字类型同样进行左填充 +- 对所有参数做 MD5 操作作为签名(为了方便理解,Demo 中不涉及加盐处理)。 +- 代码很容易实现,直接根据接口定义实现填充操作、加签名、请求调用操作即可: +```java +public class BankService { + //创建用户方法 + public static String createUser(String name, String identity, String mobile, int age) throws IOException { + StringBuilder stringBuilder = new StringBuilder(); + //字符串靠左,多余的地方填充_ + stringBuilder.append(String.format("%-10s", name).replace(' ', '_')); + //字符串靠左,多余的地方填充_ + stringBuilder.append(String.format("%-18s", identity).replace(' ', '_')); + //数字靠右,多余的地方用0填充 + stringBuilder.append(String.format("%05d", age)); + // 字符串靠左,多余的地方用_填充 + stringBuilder.append(String.format("%-11s", mobile).replace(' ', '_')); + // 最后加上MD5作为签名 + stringBuilder.append(DigestUtils.md2Hex(stringBuilder.toString())); + return Request.Post("http://localhost:45678/reflection/bank/createUser") + .bodyString(stringBuilder.toString(), ContentType.APPLICATION_JSON) + .execute().returnContent().asString(); + } + + //支付方法 + public static String pay(long userId, BigDecimal amount) throws IOException{ + StringBuilder stringBuilder = new StringBuilder(); + //数字靠右,多余的地方用0填充 + stringBuilder.append(String.format("%020d", userId)); + //金额向下舍入2位到分,以分为单位,作为数字靠右,多余的地方用0填充 + stringBuilder.append(String.format("%010d", amount.setScale(2, , RoundingMode.DOWN).multiply(new BigDecimal("100")).longValue())); + //最后加上MD5作为签名 + stringBuilder.append(DigestUtils.md2Hex(stringBuilder.toString())); + return Request.Post("http://localhost:45678/reflection/bank/pay") + .bodyString(stringBuilder.toString(), ContentType.APPLICATION_JSON) + .execute().returnContent().asString(); + } +} +``` +- 可以看到,这段代码的重复粒度更细: + - 三种标准数据类型的处理逻辑有重复,稍有不慎就会出现 Bug; + - 处理流程中字符串拼接、加签和发请求的逻辑,在所有方法重复; + - 实际方法的入参的参数类型和顺序,不一定和接口要求一致,容易出错; + - 代码层面针对每一个参数硬编码,无法清晰地进行核对,如果参数达到几十个、上百个,出错的概率极大。 +- **改造方法** +- 要用注解和反射 +- 使用注解和反射这两个武器,就可以针对银行请求的所有逻辑均使用一套代码实现,不会出 + 现任何重复。 +- 要实现接口逻辑和逻辑实现的剥离,首先需要以 POJO 类(只有属性没有任何业务逻辑的数据类)的方式定义所有的接口参数。比如,下面这个创建用户 API 的参数 +```java +@Data +public class CreateUserAPI { + private String name; + private String identity; + private String mobile; + private int age; +} +``` +- 有了接口参数定义,我们就能通过自定义注解为接口和所有参数增加一些元数据。如下所示,我们定义一个接口 API 的注解 BankAPI,包含接口 URL 地址和接口说明: +```java +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Documented +@Inherited +public @interface BankAPI { + String desc() default ""; + String url() default ""; +} +``` +- 然后,我们再定义一个自定义注解 @BankAPIField,用于描述接口的每一个字段规范,包含参数的次序、类型和长度三个属性: +```java +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Documented +@Inherited +public @interface BankAPIField { + int order() default -1; + int length() default -1; + String type() default ""; +} +``` +- + + + + + + + + + + + + + + + + + + + + + + + + +### 3.22 设计 - 接口设计:系统间对话的语言,一定要统一 +### 3.23 设计 - 缓存设计:缓存可以锦上添花也可以落井下石 +### 3.24 设计 - 业务代码写完,就意味着生产就绪了? +### 3.25 设计 - 异步处理好用,但非常容易用错 +### 3.26 设计 - 数据存储:NoSQL与RDBMS如何取长补短、相辅相成 diff --git a/code-language/java/java-demo/pom.xml b/code-language/java/java-demo/pom.xml new file mode 100644 index 0000000..e9dd3d8 --- /dev/null +++ b/code-language/java/java-demo/pom.xml @@ -0,0 +1,28 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + ../../../pom.xml + + 4.0.0 + + java-demo + + + 8 + 8 + + + + + org.example + dev-protocol-common + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/code-language/java/pic/Spring类初始化.png b/code-language/java/pic/Spring类初始化.png new file mode 100644 index 0000000000000000000000000000000000000000..f33916d51da0975ed59f2f2caa15941dcb0457ee GIT binary patch literal 127353 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 MHJqCUYle~ObJVz2HgA})?* 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

@eeezC`cjQO1jDTXO25e7Vx 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/demo/demo3/dev-protocol-netty-client longpolling/demo/demo3/dev-protocol-netty-server longpolling/demo/demo3/dev-protocol-netty-common + code-language/java/java-demo