jacobbbbbbbb
码龄5年
关注
提问 私信
  • 博客:12,370
    12,370
    总访问量
  • 66
    原创
  • 1,741,317
    排名
  • 6
    粉丝
  • 0
    铁粉

个人简介:一个java学习者的学习笔记

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2019-10-06
博客简介:

jacobbbbbbbb的博客

查看详细资料
个人成就
  • 获得7次点赞
  • 内容获得5次评论
  • 获得10次收藏
创作历程
  • 66篇
    2020年
成就勋章
TA的专栏
  • Nio与Netty
    5篇
  • spring
    14篇
  • jdbc与mybatis
    22篇
  • JDK源码
    5篇
  • 多线程
    6篇
  • JVM
    9篇
  • SpringMVC
    2篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

353人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

JDK动态代理与Cglib代理的深度分析

JDK动态代理与Cglib代理的深度分析一.JDK动态代理原理JDK动态代理首先根据需要代理类的接口、类加载以及handler来生成动态代理类:public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)其中的最主要逻辑是://生成字节码byte[] proxyClassFile = ProxyGenerator.generateProxyCla
原创
发布博客 2020.11.14 ·
185 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java设计模式总结

Java设计模式总结一.七大原则1.单一职责原则一个类应该只负责一项职责(只有类逻辑足够简单,并且类中数量足够少才可违反)。2.接口隔离原则不应该依赖它不需要的接口,一个类对另外一个类的依赖建立在最小的接口上。3.依赖倒转原则中心思想是面向接口编程。高层模块不应该依赖低层模块,都应该依赖其抽象。抽象(接口,抽象类)不应该依赖细节(具体实现类),细节应该依赖抽象。4.里氏替换原则所有引用基类的地方必须能透明地使用其子类的对象。子类中尽量不要重写父类方法。尽量不要继承,用聚合、组合、依赖
原创
发布博客 2020.10.31 ·
300 阅读 ·
0 点赞 ·
4 评论 ·
1 收藏

Netty组件源码解析(4)

SelectedSelectionKeySet 继承AbstractSet抽象类,已经select的NIO SelectionKey集合final class SelectedSelectionKeySet extends AbstractSet<SelectionKey> { //Selectionkey数组 SelectionKey[] keys; //数组可读大小 int size; SelectedSelectionKeySet() {
原创
发布博客 2020.07.13 ·
226 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Netty组件源码解析(3)

SingleThreadEventLoop 基于单线程的EventLoop抽象类,将Channel注册到EventLoop上public abstract class SingleThreadEventLoop extends SingleThreadEventExecutor implements EventLoop { //默认任务队列最大数量 protected static final int DEFAULT_MAX_PENDING_TASKS = Math.max(16,
原创
发布博客 2020.07.12 ·
163 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Netty组件源码解析(2)

三.EventLoop类图EventExecutor 继承EventExecutorGroup接口,事件执行器接口public interface EventExecutor extends EventExecutorGroup { //返回自己 @Override EventExecutor next(); //当前线程所处的EventExecutorGroup EventExecutorGroup parent(); //当前线程是否在EventLoop线程中
原创
发布博客 2020.07.10 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Netty组件源码解析(1)

一.Bootstrap这是Netty中的配置类,也是程序开始的组件。AbstractBootstrap是BootStrap和ServerBootStrap的父类抽象类public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable { @SuppressWarnings("unchecked") st
原创
发布博客 2020.07.10 ·
177 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

NIO组件源码解析

一.Channelpublic interface Channel extends Closeable { //判断此通道是否处于打开状态 public boolean isOpen(); //关闭此通道 public void close() throws IOException;}四个主要的实现类:1.SocketChannel,客户端发起TCP的Channel//客户端通道,主要两种方式可以创建SocketChannel,一种是打开一个SocketChannel并且连接
原创
发布博客 2020.07.08 ·
150 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring事务源码解析(2)

处理已经存在的事务private TransactionStatus handleExistingTransaction( TransactionDefinition definition, Object transaction, boolean debugEnabled) throws TransactionException {//如果是never模式就抛出错误 if (definition.getPropagationBehavior() == TransactionDefinit
原创
发布博客 2020.07.07 ·
187 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring事务源码解析(1)

本文主要从注解式配置入手,例如@Transactional(propagation=Propagation.REQUIRED),而分析的逻辑开始部分是在<tx:annotation-driver transaction-manager="transactionManager"/>这是自定义标签实现在TxNamespaceHandler: public void init() { this.registerBeanDefinitionParser("advice",
原创
发布博客 2020.07.07 ·
157 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

Spring整合Mybatis源码分析

SqlSessionFactoryBean//实现 FactoryBean、InitializingBean、ApplicationListener 接口public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> { private static final Lo
原创
发布博客 2020.07.04 ·
118 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(11)

接下来分析接口层,首先从SqlSession接口开始:public interface SqlSession extends Closeable { //泛型方法,经过查询返回一个指定的对象 <T> T selectOne(String statement); //根据传入的条件查询结果 <T> T selectOne(String statement, Object parameter); //经过查询,返回泛型集合 <E> List<
原创
发布博客 2020.07.03 ·
175 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(10)

//继续DefaultResultSetHandler//创建数据库映射的结果对象private Object createResultObject(ResultSetWrapper rsw, ResultMap resultMap, ResultLoaderMap lazyLoader, String columnPrefix) throws SQLException {//标识是否使用构造函数创建该结果对象 this.useConstructorMappings = false;
原创
发布博客 2020.07.03 ·
225 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

MyBatis源码解析--加载流程(9)

ResultSetHandler 会将查询结果的ResultSet转换成映射的对应结果ResultSetWrapperpublic class ResultSetWrapper {//ResultSet对象 private final ResultSet resultSet; private final TypeHandlerRegistry typeHandlerRegistry; //字段名称的数组 private final List<String> columnN
原创
发布博客 2020.07.03 ·
140 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(8)

上篇讲完了Executor接口及其实现类,接下来分析StatementHandler,这是Executor用来处理Statement的。首先是StatementHandler的接口public interface StatementHandler { //从连接中获取一个Statement Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException; //占位符
原创
发布博客 2020.06.27 ·
124 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(7)

SimpleExecutor前面已经介绍了BaseExecutor,是Executor接口的直接继承,作用是提供模版,为它的继承类可以直接继承方法,其中SimpleExecutor会不需要关心一级缓存的问题,只要实现四个基本方法就可以。public class SimpleExecutor extends BaseExecutor { public SimpleExecutor(Configuration configuration, Transaction transaction) {
原创
发布博客 2020.06.26 ·
131 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(6)

BoundSql 一次可执行的SQL封装public class BoundSql {//SQL语句 private final String sql; //ParameterMapping 数组 private final List<ParameterMapping> parameterMappings; //参数对象 private final Object parameterObject; //附加的参数集合 private final Map<
原创
发布博客 2020.06.26 ·
141 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(5)

StaticTextSqlNode 静态文本的SqlNode实现类public class StaticTextSqlNode implements SqlNode {//静态文本 private final String text; public StaticTextSqlNode(String text) { this.text = text; } @Override //直接拼接到context中 public boolean apply(DynamicCon
原创
发布博客 2020.06.19 ·
144 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(4)

接下来是解析sql语句,对应的是scripting包,实现了动态SQL语句的功能。LanguageDriver 语言驱动接口public interface LanguageDriver {//创建ParameterHandler对象 ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql);//创建sqlSource,从
原创
发布博客 2020.06.19 ·
107 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

MyBatis源码解析--加载流程(4)

接下来是注解配置的解析,入口是MapperRegistry.addMapperpublic <T> void addMapper(Class<T> type) {//首先判断必须是接口 if (type.isInterface()) { if (hasMapper(type)) { throw new BindingException("Type " + type + " is already known to the MapperRe
原创
发布博客 2020.06.15 ·
166 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

MyBatis源码解析--加载流程(3)

MapperBuilderAssistant 继承BaseBuilder抽象类,提供了一些公用的方法public class MapperBuilderAssistant extends BaseBuilder {//当前Mapper命名空间 private String currentNamespace; //资源引用的地址 private final String resource; //当前的Cache对象 private Cache currentCache; //是否
原创
发布博客 2020.06.15 ·
147 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏
加载更多