自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (1)
  • 收藏
  • 关注

原创 @Bean实现内幕

问题产生以下无论多次 getBean(A.class)还是factoryMethodA多次调用factoryMethodB, 然而factoryMethodB只会被调用一次, Spring如何做到的?@Configurationpublic class SpringTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConf

2020-09-26 11:17:47 346

原创 玩转Spring扫描创建bean

Spring如何玩转扫描包?当我们指定包名basePackages, 如@ComponentScan(basePackages = “cn.zhutan.myspringtest”), Spring会去加载该文件夹下面的class文件, 封装成MetadataReader元信息, 根据元信息判断哪些类需要创建bean, 哪些类不需要创建bean, 而这个判断条件, Spring提供了很强大的扩展, 有以下几种情况根据贴上某注解判断创建或者不创建bean指定某些类创建或者不创建bean根据正则匹配哪

2020-09-19 00:21:07 226

原创 mybatis插件拦截器使用及原理

插件使用xml配置<plugins> <plugin interceptor="cn.zhutan.mybatistest.plugin.MyPlugin"> <!--自定义属性--> <!--<property name="key1" value="value1"/>--> </plugin></plugins>自定义插件类// 注解作用, 指定拦截的具体某个方法:

2020-09-05 16:20:50 797 3

原创 使用VMware搭建Redis集群

一、搭建三主三从redis集群① 创建7001~1006一共6个文件夹② 拷贝一个原生的redis.conf文件到7001文件夹中, 并修改redis.conf# 使用后台启动daemonize yes# 使用AOF持久化存储appendonly yes# 绑定ipbind 192.168.92.130# 修改端口号port 7001# 指定数据存放的目录dir /home/zhutan/dev/redis/redis_cluster_run/7001/# 启动集群模式clust

2020-08-19 22:46:25 385

原创 1.1 获取执行调用链HandlerExecutionChain

流程查看doDispatch()方法, org.springframework.web.servlet.DispatcherServlet#doDispatch获取调用链的核心方法为:HandlerExecutionChain mappedHandler = null;// ...中间省略一些代码...mappedHandler = getHandler(processedRequest);查看getHandler()方法, org.springframework.web.servlet.Di

2020-08-04 00:08:58 733

原创 1.0 一次请求在SpringMVC核心执行流程

一次请求在SpringMVC核心执行流程org.springframework.web.servlet.DispatcherServlet#doDispatch1.1 获取执行调用链HandlerExecutionChain1.2 获取处理器适配器HandlerAdapter1.3 调用适配器的handle方法1.4 调用拦截器preHandle1.5 调用handler方法1.6 处理视图名1.7 调用postHandle方法1.8 视图渲染protected void doDispa

2020-08-04 00:04:01 132

原创 @InitBinder解析和@ModelAttribute参数注入分析

样例@Controllerpublic class HelloController { @RequestMapping("/hello") public String hello(@ModelAttribute("user")User user) { System.out.println(user); System.out.println(employee); return "hello"; } @InitBinder("user")

2020-08-03 23:56:41 580 1

原创 mybatis在mapper.xml使用$符号结合IDEA调试难发现的坑

问题现象: 在测试$和#区别时, mapper.xml使用${username}, 发现始终都被赋值root(即连接用户名)原因: 在xml配置文件中, ${xxx}占位符, 会被已经存在的键值对优先解析, 如jdbc.properties解决: Xxxmapper.xml中使用${xxx}时, 避免和其他键值对重名UserMapper.xml配置<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyC

2020-07-27 19:08:23 1286

原创 集合删除元素及异常ConcurrentModificationException

集合删除元素及异常ConcurrentModificationException使用普通for循环正序遍历删除list元素, 会跳过某些数据public class Demo15 { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list

2020-06-25 18:46:57 378

原创 CopyOnWriteArrayList特殊点, 对比ArrayList

CopyOnWriteArrayList特殊点, 对比ArrayListArrayList可以使用迭代器进行删除元素, CopyOnWriteArrayList不能使用迭代器的remove方法删除, 只能使用集合的remove方法删除public class Demo15 { public static void main(String[] args) { // 使用ArrayList的iterator删除元素 List<String> list1

2020-06-25 18:35:21 305

原创 FutureTask、Runnable、Callable三者关系

先来看下Future接口特性public interface Future<V> { boolean cancel(boolean var1); // 取消任务 boolean isCancelled(); // 判断是否取消 boolean isDone(); // 判断是否完成 V get() throws InterruptedException, ExecutionException; // 获取返回值, 并且可以抛异常 V get(lo

2020-06-15 00:23:09 339

原创 Java线程生产者消费者模式细致分析

一个生产者, 一个消费者, 生产一个消费一个public class Demo7 { private int number = 0; public static void main(String[] args) { Demo7 demo7 = new Demo7(); Runnable productor = () -> { synchronized (demo7) { while (true)

2020-06-15 00:08:35 205

原创 C语言交换变量详解

目标:交换两个整型变量a和b的值实现思维:定义两个int变量a和b,在main方法中分次调用swap1swap2swap3函数对他们进行交换#include<stdio.h>void swap1(int,int);void swap2(int*,int*);void swap3(int*,int*);int main(){ int a = 1; int b ...

2019-07-28 01:38:31 1025

原创 spring源码解析

spring源码解析spring的大体流程:@Configuration@ComponentScan("cn.zhutan.test.import_anno.beanpostprocessor")public class DemoTest { @SuppressWarnings("resource") public static void main(String[] args) { ...

2019-07-19 00:40:50 139

原创 @Import标签,从源码详细分析使用和原理

首先@Import标签可以引入三种类,分别说明其作用1.@Import(ImportSelector实现类.class)实现接口ImportSelector,重写抽象方法selectImports,返回类全限定名字符串数组①当你返回的类是普通类(也可能加了@Configuration的配置类)时,spring后续就会根据你返回的类全限定名字符串解析和创建bean定义,创建bean对象等等一系...

2019-07-13 11:16:37 820

原创 多线程,volatile可见性,简单例子帮助理解

多线程,一个奇怪的现象第一种情况:public class Test { private static boolean flag = true; public static void main(String[] args) throws InterruptedException { System.out.println("主线程开始===="); thread1(); fl...

2019-07-08 00:11:18 601 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除