work hard work smart

专注于AI+Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 61 下一页

2019年7月20日

摘要: Spring 事务的原理 AOP 动态代理 + 声明式事务管理 + 底层数据源连接控制 ┌─────────────────────────────────────────────────────────┐ │ 1. 扫描标注 @Transactional 的类和方法 │ └──────────── 阅读全文

posted @ 2019-07-20 19:33 work hard work smart 阅读(355) 评论(0) 推荐(0)

摘要: JdkDynamicAopProxy类的invoke方法 1、获得拦截器链 进入方法 然后进入getInterceptorsAndDynamicInterceptionAdvice方法 2、递归 proceed方法 进入proceed方法 目标方法执行之前的一系列的逻辑。 所有的拦截器执行完毕后,执 阅读全文

posted @ 2019-07-20 14:38 work hard work smart 阅读(400) 评论(0) 推荐(0)

摘要: 一、CgLib实现动态代理的例子 1、创建Person类 2、创建CgLibProxy 类 输出结果: Cglib通过子类实现父类的方法实现AOP 阅读全文

posted @ 2019-07-20 13:55 work hard work smart 阅读(298) 评论(0) 推荐(0)

2019年7月14日

摘要: 继续上一篇的介绍 1、上一篇分析到createAopProxy方法,创建Aop代理对象 2、进入DefaultAopProxyFactory类的createAopProxy方法 3、创建代理对象后,进入getProxy方法 this.singletonInstance = getProxy(crea 阅读全文

posted @ 2019-07-14 22:47 work hard work smart 阅读(927) 评论(0) 推荐(0)

摘要: 1、ProxyFactoryBean的典型配置 2、进入getObject方法 3、初始化Advisor链方法 initializeAdvisorChain 4、获得代理对象方法 getSingletonInstance 5、this.singletonInstance = getProxy(cre 阅读全文

posted @ 2019-07-14 21:02 work hard work smart 阅读(340) 评论(0) 推荐(0)

摘要: Spring AOP的原理: 1. Spring 启动扫描 Bean ↓ 2. 发现 TargetService 有切面需要代理 ↓ 3. Spring 做了一件关键的事: - 创建原始对象:new TargetService() - 创建代理对象:Proxy proxy = createProxy 阅读全文

posted @ 2019-07-14 16:29 work hard work smart 阅读(338) 评论(0) 推荐(0)

摘要: 1、ApplicationContext的所在的位置如下图 2、WebApplicationContext继承ApplicationContext 3、查看WebApplicationContext的实现类,常用的是XmlWebApplicationContext XmlWebApplication 阅读全文

posted @ 2019-07-14 15:38 work hard work smart 阅读(2063) 评论(0) 推荐(0)

2019年7月13日

摘要: 1、将上一篇的测试代码修改如下 输出结果: 说明person和person2是同一个对象 如果此时在beans.xml增加属性scope="prototype", 则输出结果为false 阅读全文

posted @ 2019-07-13 23:31 work hard work smart 阅读(325) 评论(0) 推荐(0)

摘要: 一、创建实例 工程的结构如下图 1、创建接口 public interface Person { public void setName(String name); public String say(); } 2、创建接口实现 public class PersonImpl implements 阅读全文

posted @ 2019-07-13 23:20 work hard work smart 阅读(218) 评论(0) 推荐(0)

摘要: 继续上一次的分析 XmlBeanDefinitionReader.java 中 1、registerBeanDefinitions方法 documentReader.registerBeanDefinitions(doc, createReaderContext(resource)); 注册Bean 阅读全文

posted @ 2019-07-13 16:32 work hard work smart 阅读(515) 评论(0) 推荐(0)

2019年7月11日

摘要: mybatis的一级缓存默认是开启的,二级缓存开启的方法: 在每个Mapper.xml文件中加入一个 阅读全文

posted @ 2019-07-11 15:50 work hard work smart 阅读(469) 评论(0) 推荐(0)

摘要: 1、导入依赖包 2、增加ehcache.xml配置文件 cache元素的属性 name:缓存名称 maxElementsInMemory:内存中最大缓存对象数 maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大 eternal:true表示对象永不过期,此时会忽略timeTo 阅读全文

posted @ 2019-07-11 15:40 work hard work smart 阅读(803) 评论(0) 推荐(0)

2019年7月1日

摘要: 一、DefaultListableBeanFactory类, 里面有一个成员变量beanDefinitionMap,Bean定义对象的Map, BeanDefinition就对应XML的属性配置 /** Map of bean definition objects, keyed by bean na 阅读全文

posted @ 2019-07-01 22:21 work hard work smart 阅读(427) 评论(0) 推荐(0)

摘要: 1、XmlBeanFactory 的使用,参考MyEclipse Spring 学习总结一 Spring IOC容器 2、使用DefaultListableBeanFactory和XmlBeanDefinitionReader ClassPathResource resource = new Cla 阅读全文

posted @ 2019-07-01 21:44 work hard work smart 阅读(597) 评论(0) 推荐(0)

2019年6月30日

摘要: 虚拟机栈:Stack Fame 栈桢 程序计数器(Program Counter): 本地方法栈:主要用于处理本地方法 堆(Heap): JVM管理的最大一块内存空间 方法区(Method Area): 存储元信息, 永久代(Permanent Generation),从JKD1.8开始,已经彻底废 阅读全文

posted @ 2019-06-30 21:14 work hard work smart 阅读(210) 评论(0) 推荐(0)

摘要: 一、创建动态代理代码 1、创建接口 2、创建接口实现类 3、创建DynamicSubject类 4、创建测试类 输出结果: 查看源码,动态代理类在ProxyGenerator类的generateProxyClass生成。 可以发现saveGeneratedFiles为true时,可以将代理类保存到磁 阅读全文

posted @ 2019-06-30 15:15 work hard work smart 阅读(261) 评论(0) 推荐(0)

摘要: 现代JVM在执行Java代码的时候,通常都会将解释执行与编译执行两者结合起来 所谓解释执行,就是通过解释器来读取字节码,遇到相应的指令就去执行该指令。 所谓编译执行,就是通过即时编译器(Just In Time,JIT) 将字节码转为本地机器码来执行;现代JVM会根据代码热点来生成相应的本地机器码。 阅读全文

posted @ 2019-06-30 13:25 work hard work smart 阅读(1219) 评论(1) 推荐(1)

摘要: 1、创建MyTest7 输出结果: animal testdog date 针对于方法调用动态分派的过程,虚拟机会在类的方法区建立一个虚方法表的数据结构(virtual method table, vtable),针对于invokeinterface指令来说,虚拟机会建立一个叫做接口方法表的数据结构 阅读全文

posted @ 2019-06-30 09:22 work hard work smart 阅读(276) 评论(0) 推荐(0)

2019年6月29日

摘要: 1、方法重载 创建MyTest5类 输出结果如下: 2、方法的静态分派 Grandpa g1 = new Father(); 以上代码,g1的静态类型是Grandpa,而g1的实际类型(真正的指向的类型)是Father 我们可以得出这样一个结论:变量的静态类型是不会发生变化的,而实际类型则可以发生变 阅读全文

posted @ 2019-06-29 21:07 work hard work smart 阅读(955) 评论(1) 推荐(0)

摘要: 1、栈桢(stack frame) 栈桢是一种用于帮助虚拟机执行方法调用与方法执行的数据结构。 栈桢本身是一种数据结构,封装了方法的局部变量表、动态链接信息,方法的返回地址以及操作数栈等信息 2、符号引用,直接引用有些符号引用是在类加载阶段或是第一次使用时就会转换为直接引用,这种转换叫做静态解析;另 阅读全文

posted @ 2019-06-29 20:31 work hard work smart 阅读(367) 评论(0) 推荐(0)

上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 61 下一页