![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 74
旭出东方旭出东方旭出东方旭出东方旭出东方
这个作者很懒,什么都没留下…
展开
-
APT你真的了解吗?解析Javac源码APT执行原理
APT你真的了解吗?解析Javac源码APT执行原理转载 2022-02-08 18:37:23 · 402 阅读 · 0 评论 -
SpringBoot中的SmartInitializingSingleton接口及其使用
转载:SpringBoot中的SmartInitializingSingleton接口及其使用一、使用场景实现SmartInitializingSingleton的接口后,当所有单例 bean 都初始化完成以后, Spring的IOC容器会回调该接口的 afterSingletonsInstantiated()方法。主要应用场合就是在所有单例 bean 创建完成之后,可以在该回调中做一些事情,例如:import org.springframework.beans.factory.ListableBe转载 2021-07-02 10:46:38 · 334 阅读 · 0 评论 -
设计模式-装饰者模式-代理模式
装饰者模式什么是装饰者模式:动态地给一些对象添加一些额外的功能。就增加功能来说装饰者模式比生成子类更加灵活。装饰者模式是一种对象结构型模式。装饰者模式的优缺点:装饰者模式与 类继承都是实现功能的扩展,但是装饰者模式比类继承有更多的灵活性。装饰者模式可以使用具体装饰类的排列组合,这样一来可以很轻易得到不同对象的行为。由于装饰者模式比类继承更加灵活,这样就意味着装饰者模式比类继承更加容易出错。装饰者模式的应用举例:当我们需要为某个对象动态地增加属性和方法时,可以考虑使用装饰者模式。当对象原创 2021-05-05 13:57:08 · 102 阅读 · 0 评论 -
JUC-Future
在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口。然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果。我们一般只能采用共享变量或共享存储区以及线程间通信的方式实现获得任务结果的目的。不过,Java中,也提供了使用Callable和Future来实现获取任务结果的操作。Callable用来执行任务,产生结果,而Future用来获得结果。Callable接口与Runnable接口是否相似,查看源码,可知Callable接口的定义如下:@Functi原创 2021-05-05 12:32:29 · 100 阅读 · 0 评论 -
JUC-CountDownLatch & CyclicBarrier
经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作。public class UseCountDownLatch { public static void main(String[] args) { final CountDownLatch countDown = new CountDownLatch(2); Thread t1 = new Thread(new Runnable() { @Override public void run原创 2021-05-04 21:07:35 · 91 阅读 · 0 评论 -
JUC并发包-线程池
为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。它们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类:Executors,他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池。什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和原创 2021-05-04 21:04:43 · 93 阅读 · 0 评论 -
并发Queue
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自QueueConcurrentLinkedQueueConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue。它是一个基于链接点的 无界线程安全队列 。该队列的元素遵循先进先出的原则。头原创 2021-05-04 16:39:04 · 167 阅读 · 1 评论 -
使用@AutoConfigureBefore、After、Order调整Spring Boot自动配置顺序
转自:使用@AutoConfigureBefore调整配置顺序竟没生效?前言Spring Boot是Spring家族具有划时代意义的一款产品,它发展自Spring Framework却又高于它,这种高于主要表现在其最重要的三大特性,而相较于这三大特性中更为重要的便是Spring Boot的自动配置(AutoConfiguration)。与其说是自动,倒不如说是“智能”,该框架看起来好像“更聪明”了。因此它也顺理成章的成为了构建微服务的基础设施,稳坐第一宝座。生活之道,在于取舍。编程何尝不是,任何决定都转载 2021-04-21 18:35:54 · 259 阅读 · 0 评论 -
spring-boot-configuration-processor 是干啥用的
转自:卡梅丽多 >> spring-boot-configuration-processor 是干啥用的spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了引入pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>转载 2021-04-21 09:21:43 · 610 阅读 · 0 评论 -
组件化之AutoService使用与源码解析
转自:组件化之AutoService使用与源码解析在JDK 1.5之后,java提供了对注解的支持,这些注解与普通代码一样,在运行期间发挥作用。在JDK 1.6中实现了JSR-269规范,提供了一组插入式注解处理器的标准API在编译期间对注解进行处理,可以看作是一组编译器的插件,可以读取/修改/添加抽象语法树中的任意元素。在Android模块开发之APT技术介绍了自定义注解处理器的一些知识,自定义注解处理器注册才能被Java虚拟机调用,在上面的博客第四小节中用的方法是手动注册,这比较违反程序员懒的特点,转载 2021-04-20 10:32:59 · 721 阅读 · 0 评论 -
注解处理器(编译期|RetentionPolicy.SOURCE)
注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理。在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译。Java5中提供了apt工具来进行编译期的注解处理。apt是命令行工具,与之配套的是一套描述“程序在编译时刻的静态结构”的API:Mirror API(com.sun.mirror.*)。通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑。具体的处理工具交给apt来处理。编写注解处理器的核心是两个类:注解处理器(com转载 2021-04-19 10:38:45 · 538 阅读 · 0 评论 -
分布式解决方案之任务调度
Java实现定时任务方式Threadpublic class Demo01 { static long count = 0; public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { while (true) { try {原创 2021-02-03 14:54:21 · 447 阅读 · 0 评论 -
Maven私服作用
一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。什么场景用Maven私服?在实际开发中,项目中可能会用到第三方的jar、内部通讯的原创 2021-02-02 11:49:46 · 330 阅读 · 0 评论 -
注解@EnableAspectJAutoProxy(exposeProxy = true) exposeProxy 的用法
假设一个接口里面有两个方法:package demo.long;public interface CustomerService { public void doSomething1(); public void doSomething2(); } 接口实现类如下:package demo.long.impl;import demo.long.CustomerService; @Servicepublic class CustomerServiceImpl转载 2020-12-31 16:43:51 · 12309 阅读 · 1 评论 -
spring扩展
BeanDefinitionRegistryPostProcessor这个类需要与@Import和@Configuration共同配合使用。一般来说@Import可以导入三种bean普通的bean classImportSelector 这个类可以通过自定义一些条件来控制classpath中需要导入的classImportBeanDefinitionRegistrar这个类可以通过代码来动态加载bean,这些bean可以是普通的定义好的class也可以是动态代理。通过查看代码我们可以知道.原创 2020-12-23 11:08:42 · 211 阅读 · 0 评论 -
spring bean 生命周期
@Bean指定初始化和销毁方法@Componentpublic class Car { public Car(){ System.out.println("car constructor..."); } public void init(){ System.out.println("car ... init..."); } public void detory(){ System.out.println("car ... detory..."转载 2020-12-21 14:15:57 · 85 阅读 · 0 评论 -
Spring组件注册
@Configuration&@Bean给容器中注册组件XML方式public class Person { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { re转载 2020-12-21 11:45:06 · 66 阅读 · 0 评论 -
SpringBoot 用 @ControllerAdvice 和 BasicErrorController 处理异常并返回结构一致的 JSON
SpringBoot 用 @ControllerAdvice 和 BasicErrorController 处理异常并返回结构一致的 JSON转载 2020-12-18 15:53:17 · 413 阅读 · 2 评论 -
使用Hystrix的插件机制,解决在使用线程隔离时,threadlocal的传递问题
背景在我们的项目中,比较广泛地使用了ThreadLocal,比如,在filter层,根据token,取到用户信息后,就会放到一个ThreadLocal变量中;在后续的业务处理中,就会直接从当前线程,来获取该ThreadLocal变量,然后获取到其中的用户信息,非常的方便。但是,hystrix 这个组件一旦引入的话,如果使用线程隔离的方式,我们的业务逻辑就被分成了两部分,如下:public class SimpleHystrixCommand extends HystrixCommand<Stri转载 2020-12-17 09:39:59 · 232 阅读 · 0 评论 -
分布式事务解决方案
分布式事务的实现主要有以下 5 种方案:XA 方案TCC 方案本地消息表可靠消息最终一致性方案最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,...转载 2020-01-15 14:39:25 · 111 阅读 · 0 评论 -
Java微服务架构文章整理(持续更新)
并发编程每秒上千订单场景下的分布式锁高并发优化实践!互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?volatile到底是什么?Java 8如何优化CAS性能?谈谈你对AQS的理解?微服务【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?...原创 2020-01-09 15:21:06 · 309 阅读 · 0 评论 -
Java中Comparable和Comparator的使用方法
Java中Comparable和Comparator的使用方法Java中Comparable和Comparator的使用方法内置引用类型的比较Comparable用法Comparator用法使用Collections对容器的比较自定义数据排序ComparableComparator内置引用类型的比较Comparable用法这些类会继承Comparable接口,实现compareTo方法原创 2017-03-16 15:30:26 · 1355 阅读 · 1 评论