- 博客(203)
- 资源 (50)
- 问答 (1)
- 收藏
- 关注
原创 无用的知识点又增加了-关于Spring Bean的生命周期
问:请描述下Spring Bean的生命周期答:简单的说就3步:1、创建BeanDefination阶段2、创建Bean阶段3、销毁Bean阶段创建BeanDefination阶段1.BeanFactory通过xml、注解配置类创建BeanDefination2.通过BeanFactoryPostProcessor.postProcessBeanFactory()对BeanFination进行修改创建Bean阶段1.反射调用构造函数,创建初始化的Bean对象2.注入@Autowired
2022-04-30 10:23:37 1113
原创 无用的知识点又增加了-关于FactoryBean
问:如果在Spring中定义了一个FactoryBean,那么容器中会存在几个Bean?一个还是两个?写一段代码测试下:public class FactoryBeanTest { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.registerBean(Us
2022-04-30 09:34:22 320
原创 那些年,我们写过的低级BUG,警钟长鸣
又一个低级的生产BUGif(newDto.getStoreName().equals(oldDto.getStoreName()) && newDto.getStoreCode().equals(oldDto.getStoreCode()) && newDto.getGoodsName().equals(oldDto.getGoodsName()) && newDto.getGoodsSpec().equals(oldDto.getGood
2022-02-23 12:44:26 757
原创 JDBC执行批量UPDATE的几个坑
关于allowMultiQueries上代码:@Test public void testUpdateBatch2Jdbc()throws Exception{ Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement( "update users set gender = 0 where id = 1;" +
2021-12-10 16:14:56 3353
原创 Mybatis一级缓存与二级缓存
一级缓存作用范围是SqlSession,当创建SqlSession的时候,会创建Executor,父类BaseExecutor中有一个localCache,查询结果就是缓存在这个localCache中。如果SqlSession执行了增删改就会刷新缓存二级缓存作用范围是namespace,当框架启动的时候会去解析每一个mapper.xml,一个mapper.xml有一个与之对应的namespace,一个xml中会有多个MappedStatement,每个查询的MappedStatement都会关联一个
2021-09-10 20:56:42 809
原创 3个线程依次交替打印ABC
方法1.wait-notifypublic static void main(String[] args) throws Exception{ Object lock1 = new Object(); Object lock2 = new Object(); Object lock3 = new Object(); Thread t1 = new Thread(()->{ while(true){ try{
2021-07-14 11:34:52 283
原创 mysql的bigint(20)里面的20代表什么含义?
参考:Types in MySQL: BigInt(20) vs Int(20)See http://dev.mysql.com/doc/refman/8.0/en/numeric-types.htmlINT is a four-byte signed integer.BIGINT is an eight-byte signed integer.They each accept no more and no fewer values than can be stored in their resp
2021-03-01 17:16:15 939
原创 又见Druid:sql injection violation, multi-statement not allow
之前写过一篇关于这个问题的文章:https://blog.csdn.net/goldenfish1919/article/details/50600053最近在一个项目中又遇到这个问题了,道理在上篇文章中已经说得很清楚了,说一下这回遇到的问题。首先,项目是用jndi来连接的数据库,因此数据库的配置不是配置在应用程序里面的,比如${tomcat_home}/conf/context.xml:<Context> <WatchedResource>WEB-INF/web.xm
2020-12-01 09:30:21 1192
原创 Apollo配置中心客户端源码解析
配置中心在现在的分布式系统可以说是一个必不可少的核心组件了,国内使用最广泛的配置中心应该是携程开发的Apollo。Apollo的思想还是挺简单的,简单地说,服务端利用Eureka做高可用,配置信息存到数据库,客户端调用服务端的接口,拉取最新的配置,如果有变化,就更新客户端的配置。服务端提供了可视化的图形界面去修改配置,保存到数据库。我们今天先来看下客户端部分是如何来实现的。客户端的主要功能就是调用服务端接口,获取最新的配置,然后更新配置。由于apollo-client的代码还是比较复杂了,因此在它的基础上
2020-10-15 12:24:25 747
原创 spring-cloud-starter-openfeign源码解析
上文中我们讲了spring-cloud-starter-openfeign的使用,比起原生的openfeign的api好用了很多,本文我们就来看下它的源码。看下spring-cloud-openfeign-core:这里面对openfeign做了自动配置,其中FeignRibbonClientAutoConfiguration和FeignLoadBalancerAutoConfiguration显然是做负载均衡的,FeignHalAutoConfiguration是用来处理application/ha
2020-09-22 19:48:08 1098
原创 如何获取当前线程中所有的ThreadLocal?
public class ThreadLocalUtil { public static Map<ThreadLocal, Object> getThreadLocalMap(){ Map<ThreadLocal, Object> threadLocals = new HashMap<>(); Thread thread = Thread.currentThread(); try{ Fiel
2020-09-16 16:37:58 7185
原创 spring-cloud-starter-openfeign使用详解
首先还是把demo跑起来:添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>添加注解@SpringBootApplication@EnableFeignClients//添加这个注解public c
2020-09-15 09:16:10 19500 1
原创 搞了一天存储过程,现在又说历史数据不用处理了。。。
十几年不写oracle的存储过程了,花了一整天,一行一行的调试出来的,说不用就不用了,记一下语法吧,万一以后还能用得上:--先创建个类型CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);-- 创建个字符串拆分函数 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_sp
2020-09-11 14:14:33 239
原创 OpenFeign源码解析
feign的核心功能就是通过接口去访问网络资源,猜一下里面也是用动态代理来实现的,就跟Mybatis用接口去访问数据库一样,今天我们就来看下源码的处理,核心就一个包:<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId></dependency>先来看个demo://feign接口public in
2020-09-08 09:13:56 878
原创 OpenFeign使用详解
openfeign是一个java的http客户端,用来简化http调用,先看一个最简单的demo:这是服务端接口:@RestControllerpublic class DemoController { @GetMapping("/hello") public String hello(){ return "hello"; }}openfeign是如何来调用这个接口的呢?public interface Demo { @RequestLine("
2020-08-31 21:00:51 8698
原创 spring-cloud-starter-netflix-hystrix使用详解
前面文中我们学习了hystrix的原生使用(hystrix入门-原生API使用)和注解使用(hystrix进阶-注解hystrix-javanica使用),本文来看下hystrix在spring-boot中的使用。首先还是先看个最简单的demo第一步:添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netf
2020-08-24 09:16:41 15023
原创 SpringBoot 2.2和2.3异常处理的一个小变化
先看个有意思的现象:@RestControllerpublic class DemoController { @GetMapping("/hello") public String hello(){ throw new RuntimeException("服务端异常,请稍后再试!"); }}在springboot2.2.0的时候,浏览器访问http://localhost:8080/hello,输出结果如下:换成springboot2.3.0的时候,输出
2020-08-18 08:57:07 1816 1
原创 hystrix进阶-注解hystrix-javanica使用
前一篇我们讲了hystrix原生api的使用,用起来还是比较复杂的,如果想让一个方法支持fallback还得去继承HystrixCommand,跟业务完全耦合到一起,对业务的侵入性太大了,显然不利于hystrix的使用,因此hystrix-javanica出现了,可以让应用以注解的方式更方便的来使用hystrix。先看个demo第一步:引入依赖<dependencies> <dependency> <groupId>com.netflix.hystrix&l
2020-08-16 15:12:26 652 2
原创 hystrix入门-原生API使用
熟悉spring-cloud的同学都知道,hystrix是用来做服务熔断降级用的,在Springloud中使用hystrix很简单,后面的文章中我们再演示,今天首先来看下原生的hystrix api是如何来使用的。hystrix入门demo<!--添加下这个依赖--><dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</
2020-08-10 09:17:58 620
原创 spring-boot-starter-logging源码解析
本文以2.2.0为例来说明下,首先还是打开jar包,不出所料,空空如也:然后打开autoconfigure的jar包,找到spring.factories,搜索logging:打开ConditionEvaluationReportLoggingListener,这里也没有配置使用哪一个log框架啊,没办法,只好看一下它的依赖:依赖了logback,同时还依赖了jul-to-slf4j和log4j-to-slf4j,我们知道logback是springboot默认使用的日志框架,那么后面这两个ja
2020-08-05 10:02:15 1896 3
原创 spring-boot-starter-data-redis源码解析与使用实战
我们以spring-boot-starter-data-redis-2.1.7为例,starter本身没有包含任何代码,只是引入了spring-data-redis的依赖,因此肯定是在spring-boot-autoconfigure中加了自动配置:我们就看下这几个配置类:其中RedisAutoConfiguration里面就配置了我们常用的RedisTemplate,RedisRepositoriesAutoConfiguration这里面是实现了spring-data规范的一些配置,RedisRe
2020-07-26 12:04:24 5779
原创 SpringBoot加载web项目流程源码解析
上一篇文章中我们写了一个极简版的SpringBoot,基本完成了Controller的映射和访问,真实的SpringBoot是如何来做的?我们以2.3.0.RELEASE版本的SpringBoot为例来看下它是如何一步一步创建内嵌的tomcat并且注册DispatcherServlet的,它是否跟上篇文章中讲的一样,也是利用了Servlet3.0的ServletContainerInitializer和WebApplicationInitializer呢? 友情提示:公众号的排版对源码的文章非常不友好,建
2020-07-20 09:36:29 396
原创 三分钟手写极简版SpringBoot-重复造个轮子
前一篇文章中(SpringMVC不使用web.xml如何配置及源码解析)我们讲了SpringMVC如何使用JavaConfiguration的方式进行配置,这个不就跟SpringBoot里面创建web项目是一样一样的吗?今天我们就来模拟一个极简版的SpringBoot。(1)添加依赖。<dependencies> <dependency> <groupId>org.springframework</groupId>
2020-07-14 09:22:50 266
原创 SpringMVC不使用web.xml如何配置及源码解析
SpringMVC在很久之前就不推荐使用web.xml作为项目的配置文件了,更推荐使用java configuration的方式,因为web.xml配置实在是太繁琐了,今天我们就来演示下如何使用更简单的java configuration的方式来配置SpringMVC,总共分3步,非常简单。第一步:添加入口类WebApplicationInitializer。首先需要在项目中添加一个WebApplicationInitializer的实现类,一般是继承AbstractAnnotationConfigDi
2020-07-06 09:20:19 1672
原创 Java中到底能不能在运行时获取方法的参数名?why?how?
最近一个项目有一个需求,需要去获取方法的参数名,我们知道,java的源文件首先是编译成class文件,jvm在运行时是执行的class文件的字节码, 那么,如果想获取到方法的参数名,首先要保证class文件中得有参数的名字才可以,那么我们就来看一下,默认的javac编译出来的class文件中是否是带有参数名的://这是一个非常简单的类:package com.github.xjs;public class CompilerDemo { public static void main(Strin
2020-07-04 13:17:39 440 1
原创 Spring IOC的@Autowired、@Inject、@Resource的区别
使用过Spring的同学相信对这几个注解都已经很熟悉了,这几个都是用来做依赖注入的,我们挨个的来看一下。@Autowired@Autowired可以加在构造函数、方法、方法参数、成员变量、注解上,从Spring4.3开始,如果bean只有一个构造函数,或者只有一个primary/default的构造函数,那么构造函数上的@Autowired可以不加,否则还是要在某个构造函数上明确的加上@Autowired。源码如下:@Deprecated@Retention(RetentionPolicy.RUN
2020-06-27 09:43:57 284
原创 spring aop的@target与@within的真正区别到底是什么?
文档里面是这么说的:@target: Limits matching to join points (the execution of methods when using Spring AOP) where the class of the executing object has an annotation of the given type.@within: Limits matching to join points within types that have the given annot
2020-06-19 21:15:14 5797 1
原创 Spring的@Bean只能放在@Configuration里面吗?
首先来看几个问题:1.@Bean方法只能定义在@Configuration里面吗?2.@Bean方法定义在@Configuration里面和定义在@Component里面有啥区别?3.@Bean方法可以是private static的吗?4.@Bean方法啥时候必须得定义成static的?先说一下答案:只要是@Component注解修饰的类里面都可以定义@Bean,并且都可以注册到Spring容器里面。其实不仅仅是@Component,只要是被@Component修饰的注解同样
2020-06-13 18:00:01 1107
原创 Spring的Event事件处理使用详解
Spring中使用事件非常简单,只需要以下的几个步骤:1.定义事件,继承ApplicationEvent2.定义监听,要么实现ApplicationListener接口,要么在方法上添加@EventListener注解3.发布事件,调用ApplicationContext.publishEvent()或者ApplicationEventPublisher.publishEvent();下面我们就用一个例子来说下具体的用法:比如用户注册成功以后,系统要给用户发送一封邮件,同时还要给用户发放优惠券,
2020-06-08 09:59:31 7403 1
原创 Spring的@EnableScheduling与@Scheduled使用详解
首先来看下EnableScheduling的javadoc:@EnableScheduling启用了Spring的任务调度功能,这跟在xml中配置task:* 是一样的,它可以加在@Configuration上:@Configuration@EnableSchedulingpublic class AppConfig {// various @Bean definitions}下面的代码可以在容器中的bean上查找到@Scheduled注解,比如:package com.myco.task
2020-05-30 13:52:42 4621
原创 Spring的@EnableAsync与@Async使用详解
@EnableAsync的javadoc@EnableAsync可以让Spring启用异步方法执行,就跟在xml中配置task:* 效果是一样的。它可以跟@Configuration结合,让整个Spring环境启用基于注解的异步处理:@Configuration@EnableAsyncpublic class AppConfig {}比如下面的MyAsyncBean是一个用户自定义的Bean,它里面的方法上添加了@Async注解或者EJB 3.1 的@javax.ejb.Asynchronou
2020-05-23 14:31:49 7358 1
原创 Spring-Boot-Starter-AOP源码解析
打开spring-boot-starter-aop的jar包:里面一个类也没有,只是在pom中添加了几个依赖:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.1.7.RE
2020-05-18 13:24:06 1008
原创 SpringAOP使用详解
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-ataspectj几个AOP相关的概念Aspect: 在SpringAOP中,切面就是一个普通的类,然后要么加上@Aspect注解,要么在xml中配置下,它里面包含了Advice和Pointcut。Joint point:程序执行的时候的某个点,比如执行方法的时候,抛出异常的时候,在SpringAOP中一般代表方法
2020-05-10 16:40:57 431
原创 Spring的@Import注解详解
首先看下@Import的javadoc文档:Provides functionality equivalent to the element in Spring XML. Allows for importing @Configuration classes, ImportSelector and ImportBeanDefinitionRegistrar implementations, ...
2020-04-26 13:34:33 339
原创 mockbatis-spring-boot-starter重复造轮子
前面两篇文章我们介绍了mybatis-spring-boot-starter的使用入门和源码解析,源码当中还是有很多地方值得我们去学习的,这篇文章我们就来实现一个自己的mockbatis-spring-boot-starter,回顾一下这里面的知识点。我们今天要实现的效果是这样的://类似于@Mapper@MockMapperpublic interface UserMapper { ...
2020-04-21 09:39:00 319
原创 MyBatis-Spring-Boot-Starter源码解析
我们以MyBatis-Spring-Boot-Starter:2.1.2为例,首先打开mybatis-spring-boot-autoconfigure:2.1.2,找到spring.factories:# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.mybatis.spr...
2020-04-17 16:35:23 827 4
原创 MyBatis-Spring-Boot-Starter扫盲
springboot集成mybatis非常简单,只需要两部:(1)添加依赖:<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <vers...
2020-04-03 13:56:52 2067 1
原创 SpringBoot的@Configuration扫盲
@Configuration注解标识的类中声明了1个或者多个@Bean方法,Spring容器可以使用这些方法来注入Bean,比如:@Configurationpublic class AppConfig { //这个方法就向Spring容器注入了一个类型是MyBean名字是myBean的Bean @Bean public MyBean myBean() { // inst...
2020-03-28 10:30:08 13818 2
原创 MySQL-MyBatis-Tinyint填坑
先看下表结构:mysql> show create table user \G*************************** 1. row *************************** Table: userCreate Table: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT...
2020-03-11 22:39:43 7284
转载 为什么Mongodb索引用B树,而Mysql用B+树?
来源:https://zhuanlan.zhihu.com/p/107228878引言好久没写文章了,今天回来重操旧业。今天讲的这个主题,是《面试官:谈谈你对mysql索引的认识》,里头提到的一个坑。也就是说,如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值。因为网上有些答案是说,B树不适合做文件存储系统的索引结构。...
2020-03-04 14:50:09 2229 2
Nginx安装配置
2017-10-13
maven+spring+mybatis配置
2015-12-17
Android-加速传感器或者OrientationEventListener做横竖屏切换
2015-08-13
Android日期时间选择控件
2015-08-12
Android-对ListView的Adapter的一种简单封装
2015-07-24
Android-maven配置multidex打包
2014-12-18
Android-用ListView模仿ExpandableListView
2014-08-01
Android-异步图片加载器
2014-05-09
Android-Popupwindow和Dialog做弹出窗口
2014-05-04
Android-网络通信框架Volley使用详解
2014-03-12
前面部分可以编辑后面部分不可编辑的EditText
2014-02-25
Android-从页面右侧滑出通讯录
2014-02-22
Android-部分可编辑的EditText
2014-02-20
SharedPreferences帮助类
2013-12-31
ListView后台更新报错:java.lang.IllegalStateException
2013-12-13
求一简单的正则表达式,用来验证用户的密码
2013-04-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人