`
raymond.chen
  • 浏览: 1419730 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
CGLIB(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Cglib代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展。   JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口,如果想代理没有实现接口的类,就可以使用Cglib实现。   不能对final类以及final方法进行代理。   定义实现类: public class UserServiceImpl { public User getUserById(Long id){ ...
Mybatis通过定义Mapper接口类,类中的方法与mapper的xml文件对应起来,然后在Service类自动注入Mapper接口类即可调用其方法。   我们可以使用JDK的动态代理机制自己实现这样的Mapper功能。   先自定义两个注解类: @Target(ElementType.TYPE) //在接口和类上使用 @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MapperEnable { boolean enable() default true; } ...
Fork/Join框架的使用         Java7提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。ForkJoinPool类是Fork/Join框架的核心,它和ThreadPoolExecutor一样也是ExecutorService接口的实现类。           ForkJoinPool最大的特殊之处就在于其实现了工作窃取(work-stealing)。所谓工作窃取,即当前线程的Task已经全被执行完毕,则自动从其他线程的任务池末尾取出任务继续执行。           一个fork/join框架之 ...
CompletableFuture是 java1.8 提供的一个新类,是对Future的增强,吸收了guava异步线程的特点,可以实现一系列的异步线程操作。CompletableFuture可以简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。   CompletableFuture合适每个操作很复杂需要花费很长时间的的场景。   范例一: /** * supplyAsync: 异步开始一个任务,并返回结果 * thenApply: 处理上一步的执行结果 * * all ...
LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,LongAdder要比AtomicLong拥有更高的吞吐量,但会耗费更多的内存空间。   LongAccumulator和LongAdder类似,也基于Striped64实现。但要比LongAdder更加灵活(要传入一个函数式接口),LongAdder相当于是LongAccumulator的一种特例。   private static ExecutorService service; //从初始值0开始,做加/减 ...
StampedLock是Java8引入的一种新的锁机制,是对读写锁ReentrantReadWriteLock的增强。该锁提供了三种模式的读写控制,分别为 writeLock 排他锁、readLock 悲观读锁、tryOptimisticRead 乐观读锁。   相比ReentrantReadWriteLock,StampedLock通过提供乐观读锁在读线程多写线程少的情况下提供更好的性能,因为乐观读锁不需要进行CAS设置锁的状态而只是简单的测试状态。       StampedLock的内部实现是基于CLH锁的,CLH锁是一种自旋锁,它保证没有饥饿的发生,并且可以保证FIFO(先进先 ...
Spring Cloud Stream 是一个用于构建“基于事件驱动的、与共享消息系统相连接的高度可扩展微服务”的框架,并提供了许多抽象和原语,以简化Spring生态系统消息驱动应用程序的开发。   核心概念:     Spring Cloud Stream的应用程序模型           应用程序通过inputs或者outputs来与Binder交互,其通过配置来绑定,Binder负责与中间件交互。      Binder抽象           提供与外部消息中间件集成的组件。           目前只提供了RabbitMQ和Kafka的Binder实现。       ...
Spring Cloud Sleuth为SpringCloud应用实现了一种分布式链路跟踪解决方案,通过Sleuth可以很清楚了解到一个服务请求经过了哪些服务,每个服务处理花费了多长时间。   Sleuth术语     Span          Span是基本的工作单元。Span包括 ...
Spring Cloud Bus通过轻量消息代理连接各个分布的节点。它可用在广播状态的变化或者其他的消息指令。Spring Cloud Bus的一个核心思想是通过分布式的启动器对Spring Boot 应用进行扩展,也可以用来建立一个多个应用之间的通信频道。   Spring Cloud Bus整合java的事件处理机制和消息中间件消息的发送和接收,主要由发送端、接收端和事件组成。针对不同的业务需求,可以设置不同的事件,发送端发送事件,接收端接收相应的事件,并进行相应的处理。   本文章介绍使用Spring Cloud Bus与Spring Cloud Config的整合,并以Rab ...

Java8新特性

    博客分类:
  • Java
1、Lambda表达式         语法由参数列表、箭头符号 -> 和函数体组成。函数体既可以是一个表达式,也可以是一个代码块。                (parameters) -> expression 或者 (parameters) -> { statements; }           表达式后面是 ...
Spring Cloud Gateway是由Spring官方基于Spring5.0,Spring Boot2.0,Project Reactor等技术开发的网关,目的是代替原先版本中的Spring Cloud Netfilx Zuul。Spring Cloud Gateway基于Webflux,比较完美地支持异步非阻塞编程,很多功能实现起来比较方便。   Spring Cloud Gateway的特征:         基于 Java 8 编码         基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 动态路由 ...
Zuul是Netflix开源的微服务网关,Spring Cloud对Zuul进行了整合和增强。在Spring Cloud体系中,Zuul担任着网关的角色,对发送到服务端的请求进行一些预处理,比如安全验证、动态路由、负载均衡等。   Zuul(1.x) 基于Servlet,使用阻 ...
新建一个工程config-consumer,通过分布式配置中心获取和使用配置信息。   pom.xml文件关键配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> <relativePath/> </parent> <pro ...
Spring Cloud Config 是 Spring Cloud 团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。   Spring Cloud Config 实现的配置中心默认采用Git来存储配置信息,可以通过Git客户端工具来方便的 ...
Hystrix Dashboard只能监控单个实例节点,如果要监控集群下hystrix的metrics情况,则需要借助Hystrix Turbine。Hystrix Turbine将每个服务的Hystrix监控数据进行了整合。   Turbine是Netflix提供的一个开源项目,用来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。Turbine有一个重要的功能就是汇聚监控信息,并将汇聚到的监控信息提供给Hystrix Dashboard来集中展示和监控。   创建一个新的工程hystrix-turbine     pom.xml文件关键配置: ...
Global site tag (gtag.js) - Google Analytics