- 博客(70)
- 资源 (4)
- 收藏
- 关注
原创 从根儿上学习spring 十一 之run方法启动第四段(5)
如果该方法返回了false说明bean属性已设置完毕不需要populateBean方法后续继续对bean进行属性设置。这几行的逻辑就是调用了invokeAwareMethods(beanName, bean)方法,这个方法的逻辑很简单就是判断当前初始化的bean是不是实现了Aware接口,如果实现了该接口那么就判断具体的Aware接口类型,比如是否是BeanNameAware接口,是的话则调用其setBeanName方法等等,这个方法很简单大家自己点进去看下就明白了,我就不赘述了。我们看下该方法的代码。
2024-08-04 22:13:06 700
原创 从根儿上学习spring 十 之run方法启动第四段(4)
这其实主要是为了防止这个bean存在动态代理的情况,如果存在动态代理那这个bean的引用就会更改,从普通的bean变成动态代理的bean,如果这时候简单的把刚实例化好的普通bean暴露出去那就会有问题。这就得结合bean的初始化生命周期来看,这时候的bean实例是创建出来了,相当于new出来一个完全新的对象,而对象的属性还没设值,所以这时候对beanDefinition的操作也最多是影响bean的属性初始化。当前bean是A,在初始化属性B的时候又会尝试去获取A,所以会再次走到A的初始化过程)
2024-08-04 22:10:35 784
原创 从根儿上学习spring 九 之run方法启动第四段(3)
一般情况下调用doGetBean方法获取的bean实例都是为了真实使用的,像我们上面举得A,B对象的例子获取的A,B对象当然都是为了真实使用的,但有种场景就只是为了做类型检查,比如有时候为了判断FactoryBean里的对象的类型就要先获取FactoryBean再通过getObject方法获取里面的真实对象来判断其类型,这时获取的FactoryBean实例可能就只是为了类型检查并不是为了真实使用。二:当bean是多例时,会有不同的创建bean的逻辑,下面我们按照代码顺序先分析单例的情况。
2024-08-04 22:07:39 983
原创 从根儿上学习spring 八 之run方法启动第四段(2)
后面我们讲bean的初始化过程还会讲到这里就先到这。假设spring先初始化A,这时候发现A依赖B所以在初始化A的过程中被打断跑去实例化并初始化B(注意这时候A的初始化过程被打断了),在初始化B的时候发现B又依赖A,spring又尝试去初始化A,这时候调用getSingleton(String beanName, boolean allowEarlyReference)方法时(beanName为A),isSingletonCurrentlyInCreation(beanName)方法就会返回true。
2024-08-04 22:03:51 724
原创 从根儿上学习spring 七 之run方法启动第四段(1)
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors方法的逻辑准确来说的话就是执行了了两个接口的两个方法,分别是BeanFactoryPostProcessor接口的postProcessBeanFactory方法和BeanDefinitionRegistryPostProcessor接口的postProcessBeanDefinitionRegistry方法,执行顺序是先执行前者再执行后者。让我们直接进入正题。
2024-08-04 21:58:50 1027
原创 从根儿上学习spring 六 之run方法启动第三段
362行就不需要多说啥了,363行是对applicationContext就行后置处理,postProcessApplicationContext方法的逻辑是向applicationContext里设置BeanNameGenerator对象(该对象用来生成bean名称的,如果你有指定的话)以及设置ResourceLoader接口实现,该接口主要用来加载classpatch下的资源,后面用到我们再细说。解释完BeanDefinitionLoader我们直接到图5的696行的load()方法里看看它做了啥。
2024-08-04 21:55:10 494
原创 从根儿上学习spring 五 之run方法启动第二段
讲完了PropertySources和PropertySource,我们再回头看图6的方法configurePropertySources方法似乎变得很简单没必要一行行分析了吧,这个方法就是向environment的sources属性里加入启动时的两个PropertySource,有不清楚的同学再结合我上面说的对着代码看两遍就清楚了,我就不再赘述了。Environment接口继承了PropertyResolver接口,PropertyResolver接口主要提供了获取配置属性的方法,如图3所示。
2024-08-04 21:51:20 730
原创 从根儿上学习spring 四 之run方法启动第一段
由上图可以看到在getSpringFactoriesInstances方法里先获取了类加载器,然后使用SpringFactoriesLoader.loadFactoryNames(type, classLoader)方法是获取所有META-INF/spring.factories资源文件里的数据,META-INF/spring.factories文件里的内容大概是xxx=yyyy的形式,而这里的xxx就是type.getname()的值,yyyy就是获取到的names集合里的每个string值。
2024-08-04 21:46:50 763
原创 从根儿上学习spring 三 之依赖注入原理了解
举个例子,你为公司所有业务部门写了一个针对一些中间件优雅下线的通用功能,可你不确定后面公司业务部门会不会后面引入其它的中间件,所以你定义了一个接口GraceDownInteface,接口里定义一个下线方法,规定所有实现了该接口的方法在服务挂掉前都会被自动执行。前面的beanFactory和bean分别代表需要扩展的对象,BeanFactory是spring的 bean容器,bean就是spring创建的bean实例。针对上面的步骤我们都可以对其做扩展处理,并且可以在每步的前后都可以做扩展处理。
2024-08-04 21:42:52 463
原创 从根儿上学习spring 二 之依赖注入原理了解
很快我们发现在SpringApplication#prepareContext里使用了getAllSources方法,在并将获取到的primarySources属性传给了SpringApplication类的load方法,跟随着load方法一步一步debug下去就会发现spring把TestMain.class封装成了BeanDefinition,并放到了DefaultListableBeanFactory的Map类型的beanDefinitionMap属性中了,key为testMain。
2024-08-04 21:40:28 670
转载 Java NIO 对 OP_WRITE 的处理 解决网速慢的连接
最近在用Java NIO, 回顾自己写的程序发现里面居然没有OP_WRITE,每次都是在OP_READ的处理逻辑中直接使用SocketChannel.write(ByteBuffer)就能够达到写数据的需求,那为什么还要OP_WIRTE呢?网上找到相关的文章,原来自己的程序是有很多细节没有考虑的,慢慢学习进步吧:17.3.1 如何处理慢速的连接对企业级的服务器软件,高性...
2020-01-08 16:23:01 492
原创 getDeclaringClass,getDeclaredClasses,getClasses的区别
getDeclaringClass 该方法返回一个Class对象,返回当前class对象的声明对象class,一般针对内部类的情况,比如A类有内部类B,那么通过B.class.getDeclaringClass()方法将获取到A的Class对象. 在使用反射对象时比如Method和Field的getDeclaringClass方法将获取到所属类对象getDeclaredCl...
2020-01-07 16:51:29 8868
原创 java type接口及子接口ParameterizedType,TypeVariable,GenericArrayType,WildcardType说明
Java的Type接口是Java中所有类型的父亲,所有类型!抄袭一张图片,下图展示了Type的继承结构,下面对每一种类型做详细说明并结合代码的形式。ParameterizedType:字面意思是参数化类型,感觉不太好理解,其实就是声明时带有泛型的类型,如果还不懂就看下面的例子演示吧TypeVariable:字面意思"类型变量",其实代表的就是泛型尖括号里的东西,比如List<...
2019-11-27 16:30:03 1371
转载 maven settings.xml说明
<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ma...
2019-11-22 16:18:17 151
原创 org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean
今天写工具方法在,在一个被其他工程依赖的项目里加了一个dao类,其它依赖项目报错org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'hqAuthMapperExt' for bean class [com.hunqingplatfor...
2019-11-19 22:28:21 2455 1
原创 AutowiredAnnotationBeanPostProcessor和RequiredAnnotationBeanPostProcessor源码简析
首先声明,本人正在努力学习spring源码,如果有志同道合的朋友可以先私信然后加好友讨论。本文比较简单由于刚看不久更多的起到记录笔记的作用,欢迎各位大佬指出问题。 首先提出问题:1.spring在什么时候开始解析@Autowired注解实现依赖注入的呢?2.@Qualifier又是如何与@Autowired配合使用的呢? 首先要明确一点的是,在spring解析beanD...
2019-11-18 11:48:25 708
原创 spring创建aop代理对象流程分析
1.在实例化bean之后会调用AbstractAutowireCapableBeanFactory的applyBeanPostProcessorsAfterInitialization方法,该方法会找到所有实例化好的BeanPostProcessor对bean进行后置处理2.AbstractAutoProxyCreator的postProcessAfterInitialization方法会...
2019-11-04 19:43:40 897
原创 spring boot启动读取并初始化mybatis mapper
在Configuration类上我们一般会加上@MapperScan(basePackages = "com.hunqingplatform.hunqing.dao.mapper1.ext",sqlSessionFactoryRef="sqlSessionFactory")这样的注解,点进该注解你会看到该注解又被@Import注解给注解了@Import注解是往spring容器中导入一些b...
2019-11-03 15:29:29 1258
原创 spring源码获取所有Advisor记录
接着上一篇spring实例化包含@Transational注解类(不论是类上还是方法上)的流程。1.在BeanPostProcesser的实现类AbstractAutoProxyCreator的wrapIfNecessary方法里调用getAdvicesAndAdvisorsForBean方法2.在其父类AbstractAdvisorAutoProxyCreator的getAdvice...
2019-10-31 16:02:46 370
原创 spring @Transational注解注释的方法或者类的初始化流程
1.入口是AbstractApplicationContext类的refresh方法调用finishBeanFactoryInitialization方法2.进入finishBeanFactoryInitialization方法的beanFactory.preInstantiateSingletons()方法3.在preInstantiateSingletons方法里调用getBe...
2019-10-31 13:14:20 307
原创 count与case when配合使用问题
SELECT COUNT(case when age>15 then scone ELSE 1 end) FROM `t_z_test1`;SELECT COUNT(case when age>15 then scone ELSE 1 end) FROM `t_z_test1`;MySQL执行这条sql时会每条记录的去执行count里的条件 如果满足age>15就对当前记...
2019-10-24 14:42:58 7748
原创 Java使用itext生成pdf
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <versi...
2019-10-12 13:53:52 484
转载 java泛型理解
1、泛型概念的提出Java语言类型包括八种基本类型(byte short int long float double boolean char)和复杂类型,复杂类型包括类和数组。早期Java版本(1.4之前)如果要代指某个泛化类对象,只能使用Object,这样写出来的代码需要增加强转,而且缺少类型检查,代码缺少健壮性。在1.5之后,Java引入了泛型(Generic)的概念,提供了一套抽象的类...
2019-09-14 15:47:30 229
转载 eclipse使用alt+/很卡的解决方法
1、点击报错的那个连接(Content Assist) ,或者 打开 Windows>preferences>Java>Editor>Content Assist>Advanced2、将Default Proposal Kinds栏中(上面框)Java Proposals (Code Recommenders)取消对勾。3、生效后,我的...
2019-09-01 09:49:48 843
原创 eclipse安装lombok教程
1.下载lombok.jar 下载地址https://projectlombok.org/download2.将lombok.jar放在eclipse的安装目录下与eclipse.ini文件同级目录3.执行java -jar lombok.jar命令4.出现点击确定。点击Specify location按钮选择eclipse安装目录,只需选到eclipse.ini文件的上一级即可。...
2019-02-15 14:48:59 292
原创 fatal unable to access 'https //.git/' the requested url returned error 500
git在创建新项目没有任何文件时使用git clone命令克隆会报fatal unable to access 'https //.git/' the requested url returned error 500错
2019-02-01 09:38:12 8098
原创 eclipse Java文件修改双击一个单词时搜索出其它相同单词的背景色
在使用eclipse开发Java工程时经常会在Java文件里选择一个单词双击看看哪里引用到,eclipse会默认把所有相同单词背景色修改标记出来。可如果背景色是黑色的就啥也看不出来就很烦,如果想修改很简单window-preferences--editors--textEditors--annotations然后找哪些背景色是黑色的一个个试下就行了,应该就是哪些occurrences单词对应的哪些...
2018-12-13 10:53:49 827
原创 spring事务执行了但却不生效
我的博客都是几句话把问题记录下就好。 今天测试spring事务时总是不生效通过追踪源码发现它也执行了rollback可数据库里的数据却没有被撤销,奇怪的很,然后把出错那行上面的动态创建表的DDL语句代码给注释掉事务就正常了,现象已说明下面稍微说下自己的想法。 本屌猜测innodb引擎的事务使用行锁和分段锁对只能基于存在的表,当发现有DDL语句参与回滚时就直接放弃此次回滚操作。纯属猜...
2018-12-11 17:15:39 362
转载 cookie及session详解
转载地址:https://www.cnblogs.com/andy-zhou/p/5360107.html目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Cookie的有效期Cookie的修改、删除Cookie的域名Cookie的路径Cookie的安全属性JavaScript操作Cooki...
2018-12-03 17:16:57 196
原创 关于在过滤器加@compent注解导致urlPatterns不起作用记录
我这么写了个过滤器请求时所有的请求都被拦截了,最后听说因为加了@compent或者@configruation注解的原因。去掉果然正常了。想知道为什么会这样以后有时间再研究吧。先记录下...
2018-08-31 16:40:13 4304 1
原创 关于junit单元测试时用户线程自动终止问题
在使用junit单元测试spring boot rabbitMQ时在onmessage方法里接收到消息正断点着呢,突然线程自动断掉了,一脸懵逼的我各种找rabbitmq的过期配置设置了一些值后再测试发现断点时间延长了,可并不是我设置的时间,无论我设置多长程序都会在一个固定时间内推出。再不使用junit测试时却不会出现这种情况。 所以断定肯定是junit的问题,百度下说junit...
2018-08-15 11:47:07 3088
转载 java中的原子操作
Java中的原子操作包括:1)除long和double之外的基本类型的赋值操作2)所有引用reference的赋值操作3)java.concurrent.Atomic.* 包中所有类的一切操作。但是java对long和double的赋值操作是非原子操作!!long和double占用的字节数都是8,也就是64bits。在32位操作系统上对64位的数据的读写要分两步完成,每一步取32位数据。这样对do...
2018-05-26 11:58:14 1709 5
转载 转载MySQL创建用户并授权
一. 创建用户命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';说明:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器例子:...
2018-05-21 16:14:29 159
原创 org.codehaus.jackson.map.JsonMappingException: (was java.lang.NullPointerException)
今天使用objectMapper的writeValueAsString方法抛出了org.codehaus.jackson.map.JsonMappingException: (was java.lang.NullPointerException)异常,一顿搜索说是解析的类里有属性是包装类型二get方法返回的是基本类型,恰恰写入的该属性的值是null才报的错。 解决办法:根据报错提...
2018-05-14 15:06:11 2365
原创 maven打包出现 java.lang.SecurityException: Invalid signature错
引用下stack overflow里找到的解决方法: For those who got this error when trying to create an uber-jar with maven-shade-plugin, the solution is to exclude manifest signature files by adding the following lines to ...
2018-05-08 17:56:40 1414
原创 mybatis使用一对多映射
假设现在有两个类 一个MatterDO和MatterPictureDO分别对应数据库表matter_tbl,matter_picture_tbl,在matter_picture_tbl里使用matter_id关联matter_tbl表。在MatterDO里有一个List<MatterPictureDO> urls属性。xml配置如下 上面xml配置中的红线部分是错误提示,如...
2018-02-26 10:57:03 414
原创 关于cros跨域的options请求session不一致注意点
不想多说 就随意记录下客户端cros跨域时会先发送预请求options。如果这时你判断session里的用户就会出现为空的情况。因为浏览器每次发送options请求的sessionid都不一样。所以在过滤器应该出理options请求 直接放行。
2018-01-22 16:21:49 1726 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人