- 博客(72)
- 收藏
- 关注
原创 tomcat-springboot
SpringApplication的启动,run方法返回一个ConfigurableApplicationContext。public static void main(String[] args) { SpringApplication.run(OutsideServiceApplication.class, args); }最后调用SrpingApplication的方法:StopWatch stopWatch = new StopWatch(); stopWatch.s...
2022-01-04 13:25:55
416
原创 mybatis sql
list 中 包含null, sql查询 in (null) ,null 也会被作为一个值 被选择 in(null) 只会选择为null的记录。queryWrapper.lambda().select(RiskCheckAsset::getId, RiskCheckAsset::getAssetNo, RiskCheckAsset::getAppNo, RiskCheckAsset::getTaskNo) .in(CollectionUtils.isNotEmpty(a
2021-11-30 12:07:11
600
原创 2021-11-10
三个队列 runnext 、 local queue 、global queue 多级队列是为了解决程序的局部性问题,最新的程序 通常最近需要执行。go 创建runnext 为空的情况go func(){ println("hello world")}()此时runnext 不为空,新来一个踢走本地队列未满,放入到local queuelocal quque 满的情况拿出原来的一般和被踢走的G 组成一个新的链表 ...
2021-11-11 13:25:04
560
原创 源码工具类
MethodIntrospector找到表有目标注解的方法annotatedMethods = MethodIntrospector.selectMethods(targetType, (MethodIntrospector.MetadataLookup<EventListener>) method -> AnnotatedElementUtils.findMergedAnnotation(method, EventListener.class)...
2021-11-03 17:25:22
141
原创 AbstractAutoProxyCreator
不同于ProxyFactory和ProxyFactoryBean 给单个bean增加代理。spring提供了基于一定规则自动发现和代理。public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {ProxyProcessorSupport 继承自Pro.
2021-10-26 14:20:31
263
原创 spring-advisor-advised
Advisor接口,holding advice(action to take at a joinpoint,在连接点上执行的动作)和pointcut。Advice EMPTY_ADVICE = new Advice() {};Advice getAdvice(); 返回aspect切面的advice部分,advice可以是Interceptor,before advice或者throws advice等,如果pointcut匹配到的话 就返回对应的advice。Default...
2021-10-20 15:29:24
171
原创 aopalliance-invocation-methodInterceptor-advice
org.aopalliance.intercept.Joinpoint 顶层接口表示一个运行时的连接点,For instance, an* invocation is the runtime joinpoint on a method (static joinpoint)proceed() :Proceed to the next interceptor in the chainorg.aopalliance.intercept.Invocation一个invocat...
2021-10-20 11:44:31
150
原创 JdkDynamicAopProxy 和 CglibAopProxy
JdkDynamicAopProxy 属性AdvisedSupport ,它是aop 代理的配置。当我们创建代理的时候会将config传递进去。JdkDynamicAopProxy 获取代理:生成jdk原生动态代理对象,同时将自己传递进去,实现了InvocationHandler的接口,@Override public Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isDebugEnabled()) {...
2021-10-19 18:49:33
176
原创 ProxyFactory
@Test public void test(){ ProxyFactory proxyFactory = new ProxyFactory(); // 可改变target的引用 HotSwappableTargetSource targetSource = new HotSwappableTargetSource(new DemoOne("黄晓明")); proxyFactory.setTargetSource(...
2021-10-19 18:27:08
493
原创 spring bean生命周期和循环引用
spring 对单例的简单bean(未被代理)解决了循环引用的问题,且spring是通过set方式才能实现,构造器注入是不行的关于多级缓存的问题:https://cloud.tencent.com/developer/article/1497692首先创建原始的bean添加到缓存(此时一级缓存坑定是没有的)添加入到三级缓存,这是一个factorygetEarlyBeanReference SmartInstantiationAwareBeanPostProce...
2021-10-12 09:43:00
126
原创 MyAdvisor
{ return false; } } }; } @Override public MethodMatcher getMethodMatcher() { return new MethodMatcher() { .
2021-10-11 18:28:08
171
原创 spring redis缓存原理
spring cache启动开关 EnabelCaching @EnableAsync@SpringBootApplication(scanBasePackages={"com.lls.asset.service"},exclude={DataSourceAutoConfiguration.class,MybatisPlusConfig.class})@NacosPropertySources({@NacosPropertySource(dataId=...
2021-10-09 14:04:25
130
原创 go-errors
1、error接口提供Error() 方法供实现// http://golang.org/pkg/builtin/#errortype error interface { Error() string}// http://golang.org/src/pkg/errors/errors.gotype errorString struct { s string}// http://golang.org/src/pkg/errors/errors.gofunc (e *errorSt
2021-09-29 11:44:42
134
原创 类型断言assertion
类型断言有个非常好的使用场景:当某个类型为interface{}的变量,真实类型为A时,才做某件事时,这时可以使用类型断言,注意 x必须是接口类型x.(T):import "fmt"func printValue(v interface{}) { fmt.Printf("The value of v is: %v", v.(int))}func main() { v := 10 printValue(unc printValue(v interface{}) { if v,
2021-09-27 14:21:12
108
原创 ApplicationEvent原理
org.springframework.context.support.AbstractApplicationContext#publishEvent(org.springframework.context.ApplicationEvent)/** * Publish the given event to all listeners. * @param event the event to publish (may be an {@link ApplicationEvent} * or a
2021-09-27 13:22:19
360
原创 interface and embedding
多态性:// Sample program to show how polymorphic behavior with interfaces.package mainimport ( "fmt")// notifier is an interface that defines notification// type behavior.type notifier interface { notify()}// user defines a user in the program
2021-09-16 11:29:57
114
原创 方法参数Parameter获取参数信息
public void test1(UpdateContractInfo updateContractInfo){ }public void test(List<String> args){}private static void fa() { List<String> dataStr = new ArrayList<>(); dataStr.add("abc"); ReflectionUtils.do.
2021-09-15 18:12:37
2480
原创 function-
function1 值类型或者指针类型都可以互相调用值接受者或者指针接受者2 是否改变原来的值 取决于接受者是值类型还是指针类型// Sample program to show how to declare methods and how the Go// compiler supports them.package mainimport ( "fmt")// user defines a user in the program.type user struct { na
2021-09-15 12:51:34
112
原创 map---
声明一个map var my map[int]int 这个map 是nil ,值为map[],长度为0 ,hash[key]=value 赋值报错,单允许访问 声明map make方式 var my make(map[T]T,num) ,num为初始map长度,默认为0 map的key 不能是function,slice,map,可以是bool,数字,string,指针,channer,interface,struct,array in short 可以用==判断 As men...
2021-09-15 11:07:28
71
原创 spring 挂扣
SmartInitializingSingleton:调用链路: 在所有bean完成初始化之后回调 bean需要实现此接口org.springframework.context.support.AbstractApplicationContext#refresh-// Instantiate all remaining (non-lazy-init) singletons. finishBeanFactoryInitialization(beanFactory); -// Inst..
2021-09-14 14:54:23
89
原创 ex-常量
未定义类型常量和已定义类型常量constant a = 123等式左边已命名常量,右边是未命名常量,拥有未定义的类型。当有足够的内存来存储整数值时,可以始终精确地表示整数未命名常量只会在编译期间存在,因此其不会存储在内存中,而命名常量存在于内存静态只读区,不能被,Go语言禁止了对常量取地址的操作// Constants live within the compiler. // They have a parallel type system. // Compiler can per..
2021-09-13 15:56:19
126
原创 maven-qa
1、java.lang.Exception: java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.<resource> <directory>src/main/resources</directory> <filtering>true</filtering>解决:filter = true 可能会破坏文件<r..
2021-09-02 12:25:44
165
原创 arthas
session 当前会话 reset 重置增强类,将被Arthas增强过得类全部还原,Arthas 服务器端关闭会重置所有增强过得类 keymapthread -b 查询死锁的进程thread -status WAITINGvmoptionjad --source-only package.class 只显示源码反编译指定的函数 jad class method...
2021-09-01 00:30:18
99
原创 go反射-
var z = 123var y = &zvar x interface{} = yfmt.Println("y ",reflect.ValueOf(y))fmt.Println("x ",reflect.ValueOf(x))reflect.ValueOf(y) 和 reflect.ValueOf(x) 都是 &z 即123的地址如果var x interface{} = &y 那么reflect.ValueOf(x) 就是&y...
2021-08-30 16:40:18
165
原创 @Aspectj 自动代理原理
@EnableAspectJAutoProxyorg.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorAutoProxyCreator extendsAbstractAdvisorAutoProxyCreator extendsAbstr...
2021-08-10 17:48:41
224
原创 Spring AOP APIs-Part III. Core Technologies翻译
12.Spring AOP APIs12.1 介绍12.2 spring中的Pointcut12.2.1 概念spring的pointcut模式可以使得pointcut重复使用advice类型,它可以使用相同的poincut定位到不同的advice上。org.springframework.aop.Pointcut接口是个核心的接口,用于将advices定位到特定的类和方法上。完整接口如下:public interface Pointcut { ClassF...
2021-08-10 16:37:18
119
原创 go-关于nil
在go语言中nil只是一个变量名,buildin/buildin.go 中 定义// nil is a predeclared identifier representing the zero value for a// pointer, channel, func, interface, map, or slice type.var nil Type // Type must be a pointer, channel, func, interface, map, or slice ty...
2021-08-10 16:36:09
636
原创 JDK动态代理原理
JDK 动态代理:通过Proxy类中内部类 ProxyClassFactory生成的代理对象生成包号,和自增num,每生成一个代理对象就会加 num后缀,直接生成一个字节码数组文件,然后defineClass,生成class对象newProxyInstanceJDK 动态代理: 定义接口: public interface Star{String sing(String name);String dance(S...
2021-08-10 16:34:00
77
原创 ali-java-多线程
java多线程 Thread的原理:private native void start0(); start0 是一个native 方法 ,jvm虚拟机在不同的操作系统上(windows,linux,unix)都是不同的算法来实现的。A native method is a Java method whose implementation is provided by non-java codeJNI技术Java不在乎Native方法是用什么语言实现的,只要一来语言能和底层打...
2021-08-10 16:33:32
122
原创 spring方法级别数据校验-MethodValidationPostProcessor原理
一、向容器中注入BeanMethodValidationPostProcessor@Beanpublic MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor();}二、MethodValidationPostProcessor 创建advisor,对应的是AnnotationMatchingPointcut,这个切点用来匹配Va.
2021-08-10 15:44:09
2134
原创 2021-08-09
一、线程执行完毕 join,wait time ,直接返回现场:在sftp建立连接的时候,不到4毫秒 ,timeout 异常,但是设置了2分钟,com.jcraft.jsch.Util#createSocket原因:tmp 是另起线程,主线程启动join等待超时时间,但是tmp线程执行完成之后,就会直接返回,因此timeout 设置的2分钟无意义。...
2021-08-09 15:19:44
97
原创 java-beans
BeanInfo Introspector.getBeanInfoBeanDescriptor PropertyDescriptor[] MethodDescriptor[]PropertyDescriptor 属性编辑器 通过beanInfo获取 描述javabean的属性以及提供暴露出可访问的方法。PropertyChangeListener PropertyEditor ==》 PropertyEditorSupportPropertyEdito...
2021-08-08 14:08:03
176
原创 jdk-虚拟机
jdk-虚拟机从java.exe 开始讲投java类加载运行全过程jdk远吗级别剖析jvm核心类加载器jdk源码级别剖析类加载双亲委派机制手写自定义类加载器打破双亲委派机制tomcat了加载机制深度剖析手写tomcat类加载器实现多个版本代码共存隔离classLoad.loadClass(.class) ==> 类 如果加载在虚拟机上的验证 字节码文件是否正确,有规范javap -v Math.class ,下面就是 二进制的另...
2021-08-05 22:49:35
214
原创 goland-gopath
通过在goland 的terminal 可以go env 可以查看到go 配置set GO111MODULE=onset GOPATH=D:\opt\gopath;C:\Users\lixiaojian\go电脑上powderShell go env 查看set GOPATH=C:\Users\lixiaojian\gogoland 的go 配置仅限goland编译器关于下载包的问题当我们开启go mod 模式 go env -w GO111MODULE=on 即s...
2021-07-29 15:40:53
522
原创 docker-compose
语法:docker compose文件的语法说明https://docs.docker.com/compose/compose-file/先来一个简单的实例:之前做了一个go-web 程序的镜像,这里通过docker-compose来创建容器version: "3.8"services: dockergo-demo: image: godocker:1.0 networks: - demo-network ports: - 8081.
2021-07-28 23:35:14
401
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人