`
raymond.chen
  • 浏览: 1436777 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
Spring常用的PointcutAdvisor         NameMatchMethodPointcutAdvisor         RegexpMethodPointcutAdvisor         AspectJExpressionPointcutAdvisor         DefaultPointcutAdvisor   Spring常用的Pointcut         NameMatchMethodPointcut         JdkRegexpMethodPointc ...
Spring的拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor。   HandlerInterceptor拦截器         HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。实现一个HandlerInterceptor拦截器可以实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。   自定义拦截器: public class CustomInterceptor implem ...

Spring的动态代理

AOP是Spring的重要组成部分,而AOP正是通过代理实现的。如果代理对象实现了接口,则默认使用jdk动态代理,也可强制使用cglib代理,如果未实现接口则只能使用cglib代理。        JDK动态代理: https://chenjumin.iteye.com/blog/2437314, ...
spring retry是从spring batch独立出来的一个功能,主要实现了重试和熔断。   重试策略:        NeverRetryPolicy:只调用RetryCallback一次,不重试        SimpleRetryPolicy:重试n次,默认3次,也是RetryTemplate模板默认的策略。很常用        ExceptionClassifierRetryPolicy:可以根据不同的异常,执行不同的重试策略,很常用        TimeoutRetryPolicy:在n毫秒内不断进行重试,超过这个时间后停止重试        CircuitB ...
ThreadLocal用于保存某个线程的共享变量。 ThreadLocal在每个线程中对该变量会创建一个副本,即每个线程内部都会有一个该变量,且在线程内部任何地方都可以使用,线程之间互不影响。   值的存取过程:  ThreadLocal --> Current Thread --> ThreadLocalMap<ThreadLocal, Value> --> ThreadLocalMap.Entry<ThreadLocal, Value>   防止ThreadLocal的弱引用问题(会出现内存泄露):        使用完线程共享变量后, ...
Reflections 通过扫描 classpath,索引元数据,允许在运行时查询这些元数据,也可以保存收集项目中多个模块的元数据信息。   maven依赖包: <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.11</version> </dependency>   public class ReflectionsTest { ...
Spring的util包提供了退避算法的实现,BackOff接口和BackOffExecution接口,还有两种具体的策略实现,ExponentialBackOff和FixedBackOff。   FixedBackOff 固定时间间隔重试        每次的间隔时间一样,累计间隔次数达到设定值时,下次BackOff返回-1 long interval = 1000; //重试间隔 long maxAttempts = 10; //最大重试次数 BackOff backOff = new FixedBackOff(interval, maxAttempts); Back ...
Starter的工作原理:        1、Spring Boot在启动时扫描项目所依赖的jar包,寻找包含spring.factories文件的jar包。        2、读取spring.factories文件获取配置的自动配置类XXXAutoConfiguration。        3、将自动配置类下满足条件(@ConditionalOnXxx)的Bean加入到IOC容器中   编写pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt ...
使用@ControllerAdvice和@ExceptionHandler两个注解实现Controller层的全局异常统一处理。   特别介绍:        用@ModelAttributes注解标注的方法用于将属性值收集到一个Model类中,并应用到所有的Controller上。     GlobalExceptionHandler类源码: @ControllerAdvice //@RestControllerAdvice //全部异常处理返回json时可以使用此Advice public class GlobalExceptionHandler { public ...
使用方式:        1、借助 @Import 注解类,创建ImportBeanDefinitionRegistrar的子类,手动构造BeanDefinition对象并注册到容器        2、借助BeanFactoryPostProcessor接口类,通过ClassPathBeanDefinitionScanner类扫描并注册类到容器        3、借助 @Import 注解类,创建ImportBeanDefinitionRegistrar的子类,通过ClassPathBeanDefinitionScanner类扫描并注册类到容器   一、通过创建 ImportBea ...
使用Guava的SimpleTimeLimiter类可以实现调用方法超过指定时间后还没返回时中断调用的逻辑。   /** * 基于代理模式实现 */ private static void test1() { ExecutorService executorService = Executors.newCachedThreadPool(); TimeLimiter timeLimiter = new SimpleTimeLimiter(executorService); UserService userService = timeLimiter .newPr ...
常用的限流算法有漏桶算法和令牌桶算法:         漏桶算法(Leaky Bucket):请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。         令牌桶算法(Token Bucket):以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务。   Guava的RateLimiter类基于令牌桶算法实现流量限制。获取令牌的方式有两种:阻塞等待令牌或者取不到立即返回失败。   Guava有两种限流模式,一种为稳定模式(SmoothBursty:令牌生成速度恒定),一种为渐进模式(Smoot ...
ListenableFuture是对JDK的Future的封装和增强,为Future添加回调机制。 JDK8也新增了CompletableFuture类实现了相同的功能,范例见 https://chenjumin.iteye.com/blog/2437228 ,建议用JDK8自带的CompletableFuture类。   public class ListenableFutureTest { private static int threadCount = 5; //线程数 private static AtomicInteger count = new AtomicInt ...
Lettuce是一个可伸缩的线程安全的Redis客户端,支持同步、异步和响应式模式。多个线程可以共享一个连接实例,而不必担心多线程并发问题。它基于Netty框架构建,支持Redis的高级功能,如Sentinel,集群,流水线,自动重新连接和Redis数据模型。   Jedis在实现上是直连Redis-Server,多线程环境下非线程安全,需要通过连接池来使用Jedis。   Maven需要添加以下依赖包: <dependency> <groupId>biz.paluch.redis</groupId> <artifactId>l ...
CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该barrier在释放等待线程后可以重用,所以称它为循环的barrier。   CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。   public class CyclicBarrierTest { private static CyclicBarrier barrier; private static int threadCount = ...
Global site tag (gtag.js) - Google Analytics