
源码分析
文章平均质量分 92
Lucare
风能吹走纸张却吹不走蝴蝶,生命的力量在于不顺从!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Junit3.8源码--核心类
以textui来分析:Test顶层接口。TestSuite和TestCase均实现此接口,在具体执行的时候面向此接口编程,弱化类型,实现各自的执行流程。原创 2017-12-17 22:31:24 · 622 阅读 · 0 评论 -
Mybatis 源码分析(9)—— 事物管理
Mybatis 提供了事物的顶层接口:public interface Transaction { /** * Retrieve inner database connection * @return DataBase connection * @throws SQLException */ Connection getConnection() throw...原创 2018-05-11 18:08:47 · 458 阅读 · 0 评论 -
Mybatis源码分析(7)—— 结果集处理
解析封装ResultMap 是和结果集相关的东西,最初在解析 XML 的时候,于 parseStatementNode 方法中,针对每一个 select 节点进行解析,转换为 MappedStatement(类似 Spring 的 bean 配置和 BeanDefinition 的关系)。在 MapperBuilderAssistant 的 addMappedStatement 方法中,...原创 2018-04-21 18:01:20 · 2870 阅读 · 0 评论 -
Mybatis源码分析(6)—— 从JDBC看Mybatis的设计
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。六步流程:加载驱动(5.x驱动包不需要这步了)建立连接创建Statement执行SQL语句获取结果集关闭资源这里只取后面几步分析下,基本上都是从Executor开始。De...原创 2018-04-15 12:07:55 · 582 阅读 · 0 评论 -
Mybatis源码分析(5)—— 插件的原理
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,可以使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParam...原创 2018-04-08 21:00:27 · 346 阅读 · 0 评论 -
Mybatis源码分析(4)—— Mapper的创建和获取
Mybatis我们一般都是和Spring一起使用的,它们是怎么融合到一起的,又各自发挥了什么作用?就拿这个Mapper来说,我们定义了一个接口,声明了一个方法,然后对应的xml写了这个sql语句, 它怎么就执行成功了?这家伙是怎么实现的,带着这个好奇心,我一步步跟踪,慢慢揭开了它的面纱。一、初始化时的埋点MapperFactoryBean的父类SqlSessionDaoSuppor...原创 2018-04-01 11:22:10 · 1577 阅读 · 0 评论 -
Shiro的鉴权方式
一、 怎么用Shiro 支持三种方式的授权编程式:通过写 if/else 授权代码块完成:Subject subject = SecurityUtils.getSubject(); if(subject.hasRole(“admin”)) { //有权限} else { //无权限}注解式:通过在执行的 Java 方法上放置相应的注解完成:@Require...原创 2018-02-25 09:38:41 · 10273 阅读 · 1 评论 -
Mybatis源码分析(1)—— Mapper文件解析
感觉优快云对markdown的支持不够友好,总是伴随各种问题,很恼火!xxMapper.xml的解析主要由XMLMapperBuilder类完成,parse方法来完成解析: public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(par...原创 2018-03-01 21:41:42 · 742 阅读 · 0 评论 -
Mybatis源码分析(3)—— 从Mybatis的视角去看Bean的初始化流程
不涉及Spring完整的启动流程,仅仅从Mybatis的视角去分析几个关键的方法,找到Mybatis是如何通过这几个扩展点植入进去的,反过来看Spring是如何设计,埋下这些伏笔,实现其可扩展性。springContext-mybatis.xml的配置:<!-- simplest possible SqlSessionFactory configuration -->&l...原创 2018-03-08 21:41:34 · 934 阅读 · 0 评论 -
Shiro切入Spring的方式
在springMVC中要使用shiro,一般都遵循下面的配置:applicationContext-shiro.xml<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="...原创 2018-02-08 09:44:07 · 514 阅读 · 0 评论 -
Shiro的认证原理(Subject#login的背后故事)
登录操作一般都是我们触发的:Subject subject = SecurityUtils.getSubject();AuthenticationToken authenticationToken = new ...subject.login(authenticationToken);Subject的登录将委托给SecurityManager,SecurityManager的log原创 2018-02-07 20:22:10 · 22689 阅读 · 7 评论 -
Mybatis 源码分析(2)—— 参数处理
Mybatis对参数的处理是值得推敲的,不然在使用的过程中对发生的一系列错误直接懵逼了。以前遇到参数绑定相关的错误我就是直接给加@param注解,也稀里糊涂地解决了,但是后来遇到了一些问题推翻了我的假设:单个参数不需要使用 @param 。由此产生了一个疑问,Mybatis到底是怎么处理参数的?几种常见的情景:单个参数不使用注解,基于${}和#{}的引用,基本类型和自定义对象都可以...原创 2018-03-06 22:17:08 · 3844 阅读 · 0 评论 -
Shiro过滤器的维护与匹配执行
servlet的初始化会触发核心过滤器的创建:public Object getObject() throws Exception { if (instance == null) { instance = createInstance(); } return instance;}在createInstance方法中会调用 FilterC原创 2018-01-17 20:28:32 · 837 阅读 · 0 评论 -
DelegatingFilterProxy干了什么?
org.springframework.web.filter.DelegatingFilterProxy一般情况,创建一个Filter是交给自己来实现的。基于servlet规范,在web.xml中配置,自定义filter实现Filter接口:public interface Filter { void init(FilterConfig var1) throws Servle原创 2018-01-07 11:18:42 · 3827 阅读 · 0 评论 -
Shiro源码分析之Subject和SecurityManager
Subject毫无疑问,Subject是Shiro最重要的一个概念。“Subject”只是一个安全术语,意味着应用程序用户的特定于安全性的“视图”。Shiro Subject实例代表单个应用程序用户的安全状态和相关操作。创建初次创建是在AbstractShiroFilter#doFilterInternal方法中: final Subject subject = cre原创 2018-01-30 18:13:52 · 3343 阅读 · 0 评论 -
ShiroFilterFactoryBean分析
创建核心Filter同其他框架一样,都有个切入点,这个核心Filter就是拦截所有请求的。通过web.xml中配置的Filer进入,执行init方法获取这个instance,调用下面的createInstance方法创建核心Filter:protected AbstractShiroFilter createInstance() throws Exception { log.debug("Cr原创 2018-01-01 21:09:39 · 5226 阅读 · 0 评论 -
Mybatis 源码分析(8)—— 一二级缓存
一级缓存其实关于 Mybatis 的一级缓存是比较抽象的,并没有什么特别的配置,都是在代码中体现出来的。当调用 Configuration 的 newExecutor 方法来创建 executor:public Executor newExecutor(Transaction transaction, ExecutorType executorType, boolean autoC...原创 2018-05-05 18:22:26 · 434 阅读 · 1 评论