EventBus原理解析

前言

EventBus的核心思想是观察者模式 (生产/消费者编程模型) 。

SpringBoot+EventBus使用教程(一)

SpringBoot+EventBus使用教程(二)

通过前面的文章我们已经知道,如何使用eventBus了。我们需要先定义一个Observer(前文中的EventListener类),然后将其注册到eventBus里,通过 @Subscribe 定义消息回调函数。

那我们先看看register(Object object) 和unregister(Object object) 方法。

继续阅读“EventBus原理解析”

Spring里的条件注解@Conditional

一、简介

平常在开发的时候,我们经常会遇到在满足某些特定条件情况下才去创建某个bean。这个特定条件,可以是某项配置是否配置,某个bean是否存在,某个jar包是否在特定的路径下等等。总之所有这些需要用到条件判断的场景我们都可以使用@Conditional注解来达到自动配置的效果。

如果您阅读过springboot的源码,就会发现springboot里大量使用了这一特性。

下面就以一个示例进行实战,假设我现在需要获取当前系统环境的cpu、内存、磁盘等实时信息,那windows和linux的代码实现是不一样的。

继续阅读“Spring里的条件注解@Conditional”

Lombok中使用@EqualsAndHashCode注解

有的时候,我们需要重写一个类的@equals和@hashcode方法,就可以使用@EqualsAndHashCode注解。

官网上大致是这样介绍@EqualsAndHashCode注解的

  1. 此注解会生成equals(Object other) 和 hashCode()方法。
  2. 它默认使用非静态,非瞬态的属性
  3. 可通过参数exclude排除一些属性
  4. 可通过参数of指定仅使用哪些属性
  5. 它默认仅使用该类中定义的属性且不调用父类的方法
  6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。

另:@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。

BigDecimal的3个toString方法比较

BigDecimal类有3个toString方法,分别是toEngineeringString、toPlainString和toString,

从BigDecimal的注释中可以看到这3个方法的区别:

  • toEngineeringString:有必要时使用工程计数法。工程记数法是一种工程计算中经常使用的记录数字的方法,与科学技术法类似,但要求10的幂必须是3的倍数
  • toPlainString:不使用任何指数
  • toString:有必要时使用科学计数法
继续阅读“BigDecimal的3个toString方法比较”

Java里将较大浮点类型的数据由科学计数法显示转为字符串

比如像下面代码显示出来的数据是1.111111111111E10这样的科学计数数据显示,但是我们实际在开发时可能希望数据在传输和显示时是11111111111.11这样字符显示。

继续阅读“Java里将较大浮点类型的数据由科学计数法显示转为字符串”

深入理解Spring事务支持@Transactional

我们平常在系统开发中,肯定都绕不开事务管理。Spring里封装了对事务的支持。分别是声明式事务和编程式事务。
编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional注解的方式。注释配置是目前流行的使用方式,因此本文将着重介绍基于@Transactional 注解的事务管理。

继续阅读“深入理解Spring事务支持@Transactional”

Spring中@Component、@Repository、@Service、@Controller注解的区别

官网解释

在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常

在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Service,@Controller。@Component是一个通用的Spring容器管理的单例bean组件。而@Repository, @Service, @Controller就是针对不同的使用场景所采取的特定功能化的注解组件。

继续阅读“Spring中@Component、@Repository、@Service、@Controller注解的区别”

Spring里的getBean(String beanName)大小写敏感的问题

一般情况下,我们在spring里使用bean有两种方式。

一种是 @Component, @Repository, @Service, @Controller 等注解来定义bean, 另一种是 @Configuration/@Bean 这种方式 定义bean,要使用的地方也是直接用@AutoWired来注入就行了。

但是如果我们使用ApplicationContext.getBean(String beanName)这种方式获取bean,就要注意bean的大小写问题了。

继续阅读“Spring里的getBean(String beanName)大小写敏感的问题”