interceptor

Cglib invoke以及invokeSuper的一点区别

删除回忆录丶 提交于 2020-08-10 15:54:18
简单记录下,解决的一个问题,Cglib的invoke和invokeSuper的区别:   简而言之, invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器链条,就会重新在走一次拦截器链; 一。准备环境 Gglib的两个jar包,因为Cglib使用了ASM生成子类; 二。代码准备 public class Target { public void a() { System.out.println( " a 方法" ); } public void b() { System.out.println( " b 方法" ); } } import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class MyMethodInterceptor implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args,

Cglib invoke以及invokeSuper的一点区别

偶尔善良 提交于 2020-08-10 15:53:41
简单记录下,解决的一个问题,Cglib的invoke和invokeSuper的区别:   简而言之, invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器链条,就会重新在走一次拦截器链; 一。准备环境 Gglib的两个jar包,因为Cglib使用了ASM生成子类; 二。代码准备 public class Target { public void a() { System.out.println( " a 方法" ); } public void b() { System.out.println( " b 方法" ); } } import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class MyMethodInterceptor implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args,

Jerry.hu/mybatis-cipher

…衆ロ難τιáo~ 提交于 2020-08-10 11:06:14
mybatis-cipher 项目介绍 基于mybatis 来实现对敏感数据在进出DB时候进行脱敏处理, 让各位码友们无需自己各种手动实现 安装教程 下载最新的jar包 mybatis-cipher-plus 使用说明 配置初始化 spring boot 模式 零配置模式 配置加解密拦截器 /** * MybatisPlusConfig * @author Jerry.hu * @summary MybatisPlusConfig * @Copyright (c) 2018, xiaoweige Group All Rights Reserved. * @Description MybatisPlusConfig * @since 2018-09-29 16:46 */ @EnableTransactionManagement @Configuration public class MybatisPlusConfig { @Bean public FieldEncryptInterceptor paginationInterceptor () { return new FieldEncryptInterceptor (); } } yml配置 mybatis : type-aliases-package : org.xiaoweige.mybatis.cipher.example

SpringCloud:Spring Cloud 之 okhttp

孤者浪人 提交于 2020-08-10 07:10:07
1. 什么是 okhttp ? okhttp 是由 square 公司开源的一个 http 客户端。在 Java 平台上,Java 标准库提供了 HttpURLConnection 类来支持 HTTP 通讯。不过 HttpURLConnection 本身的 API 不够友好,所提供的功能也有限。大部分 Java 程序都选择使用 Apache 的开源项目 HttpClient 作为 HTTP 客户端。Apache HttpClient 库的功能强大,使用率也很高。 2. 为什么要使用 okhttp ? okhttp 的设计初衷就是简单和高效,这也是我们选择它的重要原因之一。它的优势如下:(了解源码可+求求: 1791743380) 支持 HTTP/2 协议。 允许连接到同一个主机地址的所有请求,提高请求效率。 共享Socket,减少对服务器的请求次数。 通过连接池,减少了请求延迟。 缓存响应数据来减少重复的网络请求。 减少了对数据流量的消耗。 自动处理GZip压缩。 3. 实战目标 Feign 中使用 okhttp 替代 httpclient Zuul 中使用 okhttp 替代 httpclient 4. 在 Feign 中使用 okhttp 首先介绍一下工程结构,本演示工程包含 provider-server、consumer-server、eureka-server 和

【Spring】内嵌Tomcat&去Xml&调试Mvc

戏子无情 提交于 2020-08-09 20:38:38
菜瓜:今天听到个名词“父子容器”,百度了一下,感觉概念有点空洞,这是什么核武器? 水稻:你说的是SpringMvc和Spring吧,其实只是一个概念而已,用来将两个容器做隔离,起到解耦的作用,其中子容器可以拿到父容器的bean,父容器拿不到子容器的。但是SpringBoot出来之后这个概念基本就被淡化掉,没有太大意义,SpringBoot中只有一个容器了。 菜瓜:能不能给个demo? 水稻:可以。由于现在SpringBoot已经大行其道,Mvc你可能接触的少,甚至没接触过。 早些年启动一个Mvc项目费老鼻子劲了,要配置各种Xml文件(Web.xml,spring.xml,spring-dispather.xml),然后开发完的项目要打成War包发到Tomcat容器中 现在可以直接引入Tomcat包,用main方法直接调起。为了调试方便,我就演示一个Pom引入Tomcat的例子 ①启动类 package com.vip.qc.mvc; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.startup.Tomcat;

架构简洁之道:从阿里开源应用架构 COLA 说起

让人想犯罪 __ 提交于 2020-08-09 13:04:50
导读 :COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。 最近,同事告诉我,COLA 作为应用架构,已经被选入阿里云的 Java 应用初始化的应用架构选项之一。 This is really something,于是,在这个里程碑节点上,我开始回过头来,重新审视 COLA 一路走来的得与失。 COLA 作为一种架构思想无疑是成功的。但是作为框架,个人感觉有点鸡肋之嫌。特别是在简洁性上做的不好,感觉做了不少画蛇添足的事情。 试想一下,有些功能我作为作者都很少去使用,我实在想不到,它为什么还有存在的理由。 基于上面的思考,我做了这一次 COLA 2.0 到 COLA 3.0 的升级。在本次升级中,我没有增加任何新的功能,而是尽量多删减了一些概念和功能。让 COLA 可以更加纯粹的 focus 在应用架构上,而不是框架支持和架构约束上。 支持我做这些决策的背后原因只有一个——奥卡姆剃刀原理。 奥卡姆剃刀原理 奥卡姆剃刀原理,是指如无必要,勿增实体(Entities should not be multiplied unnecessarily),即

聊聊rocketmq-client-go的PullConsumer

ぐ巨炮叔叔 提交于 2020-08-09 11:36:29
序 本文主要研究一下rocketmq-client-go的PullConsumer PullConsumer rocketmq-client-go-v2.0.0/consumer/pull_consumer.go type PullConsumer interface { // Start Start() // Shutdown refuse all new pull operation, finish all submitted. Shutdown() // Pull pull message of topic, selector indicate which queue to pull. Pull(ctx context.Context, topic string, selector MessageSelector, numbers int) (*primitive.PullResult, error) // PullFrom pull messages of queue from the offset to offset + numbers PullFrom(ctx context.Context, queue *primitive.MessageQueue, offset int64, numbers int) (*primitive.PullResult, error)

2.2 Dispatcher请求过程-获取mappedHandler

旧城冷巷雨未停 提交于 2020-08-09 00:04:40
接着上篇的 第一个点分析 getHandler mappedHandler = this.getHandler(processedRequest); @Nullable protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { if (this.handlerMappings != null) { Iterator var2 = this.handlerMappings.iterator(); while(var2.hasNext()) { HandlerMapping mapping = (HandlerMapping)var2.next(); HandlerExecutionChain handler = mapping.getHandler(request); if (handler != null) { return handler; } } } return null; } 从源码中可以看出 从一个HandlerMapping列表中获取到一个不为空的HandlerExecutionChain就返回 其中handlerMappings是个list @Nullable private List<HandlerMapping> handlerMappings

SpringBoot 拦截器配置

青春壹個敷衍的年華 提交于 2020-08-08 23:55:51
一、基于URL实现的拦截器: public class LoginInterceptor extends HandlerInterceptor{ /**www.1b23.com * 在请求处理之前进行调用(Controller方法调用之前) * 基于URL实现的拦截器 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getServletPath(); if (path.matches(Const.NO_INTERCEPTOR_PATH)) { //不需要的拦截直接过 return true; } else { // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等 System.out.println("===================================="); return true; } } } 关键代码:path.matches

超全!Java基础知识点总结

谁都会走 提交于 2020-08-08 10:15:57
本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结。Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理。 纸上得来终觉浅,绝知此事要躬行。笔者之前对每部分的内容对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,欢迎读者指正。 Java基础知识点总结 每部分内容会重点写一些常见知识点,方便复习和记忆,但并不是全部内容。 面向对象三大特性 继承:一般类只能单继承,内部类实现多继承,接口可以多继承 封装:访问权限控制public > protected > 包 > private 内部类也是一种封装 多态:编译时多态,体现在向上转型和向下转型,通过引用类型判断调用哪个方法(静态分派)。 运行时多态,体现在同名函数通过不同参数实现多种方法(动态分派)。 基本数据类型 基本类型位数,自动装箱,常量池。 例如byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256,也就是2的八次方。 32位和64位机器的int是4个字节也就是32位,char是1个字节就是8位,float是4个字节,double是8个字节,long是8个字节。 基本数据类型的包装类只在数字范围-128到127中用到常量池