摘要:
bean的实例化过程是spring容器启动的核心部分,会把上面已经注册的BeanDefinitionMaps中的非懒加载的对象,全部实例化,这个 过程中包括bean对象的创建、属性的设置、初始化等等。 1:在AbstractApplicationContext类中的refresh方法中有个finis 阅读全文
摘要:
BeanPostProcessor是处理bean的后置接口,beanDefinitionMaps中的BeanDefinition实例化完成后,完成populateBean,属性设置,完成 初始化后,这个接口支持对bean做自定义的操作。 一:BeanPostProcessor的使用 定义一个测试用的 阅读全文
摘要:
一:BeanDefinitionRegistryPostProcessor 与BeanFactoryPostProcessor接口 这个接口支持自定义beanDefinition的注册,在标准的注册完成后(解析xml或者注解),在与实例化对象之前,实现这个接口 可以向beanDefinitionMa 阅读全文
摘要:
上一节我们分析了默认标签的解析,这一节看一次自定义标签,例如:context aop 等等都是自定义标签,在 分析自定义标签之前,我们先看一下SPI机制, SPI就是一个服务的扩展机制,可以把接口的实现类配置到META-INF元数据区, 框架启动时加载到缓存,最初的版本是jdk中实现的,后来在spr 阅读全文
摘要:
这两个占位符,#预编译后设置参数,#{}会被参数替换,$ 是sql与参数直接拼接,容易sql注入。 变量直接替换一般使用$,例如in(${xxx}),下面看一下源码层面怎么实现的。 一:#{}的替换 #{} 的替换就是jdbc预编译后的替换占位符 ? /** * 执行查询操作 * * @param 阅读全文
摘要:
上一节spring源码分析,看到spring将xml文件封装成了Document对象,然后委托给BeanDefinitionDocumentReader来解析,从parseBeanDefinitions这个方法开始看, 一:解析默认元素bean 1:解析的流程 看一下delegate如何解析bean 阅读全文
摘要:
mybatis缓存有一级缓存和二级缓存,一级缓存的作用域是sqlSession,在一次会话内,默认是开启的,如果在一次会话内,查询的sql、参数相同,则 会从缓存中取数据,如果没有命中则执行dml操作会清除缓存;二级缓存的作用域是sqlSessionFactory,默认是关闭的,需要在mybatis 阅读全文
摘要:
这里我们以最基础的xml配置的形式来解析,看一下spring启动流程的初始步骤: 一:使用spring 引入依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> 阅读全文
摘要:
一:插件的使用 以分页插件PageHelper为例,看一下mybatis的插件如何工作 首先添加pageHelper的maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</arti 阅读全文
摘要:
1:根据sqlId没有找到对应的MapperStatement,有可能是sql语句不存在、或者sqlId的名字和mapper方法中的名字对不上 Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid 阅读全文