- 博客(24)
- 收藏
- 关注
原创 第一个PROPAGATION_REQUIRED,第二个是PROPAGATION_REQUIRES_NEW执行过程
1.demo代码 @Test public void test_required_requires_new() { AccountService accService = ctx.getBean("accountServiceImpl", AccountService.class); transactionTemplate.execute(status -> { accService.addDate("郭林", 123); transactionTemplate.s
2020-08-31 01:12:14
729
原创 第一个PROPAGATION_REQUIRED,第二个是PROPAGATION_NOT_SUPPORTED执行过程
1.demo代码 @Test public void test_required_supports() { AccountService accService = ctx.getBean("accountServiceImpl", AccountService.class); transactionTemplate.execute(status -> { accService.addDate("郭林", 123); transactionTemplate.setPr
2020-08-31 00:55:37
1905
原创 两个PROPAGATION_REQUIRED事务执行过程
1.demo代码 @Test public void test_required_required_error() { AccountService accService = ctx.getBean("accountServiceImpl", AccountService.class); transactionTemplate.execute(status -> { accService.addDate("郭林", 123); try { transactio
2020-08-31 00:08:40
348
原创 Spring事务基础接口
spring事务三大接口:1.TransactionStatusspring对事务封装的接口public interface TransactionStatus extends SavepointManager, Flushable { boolean isNewTransaction(); boolean hasSavepoint(); void setRollbackOnly(); boolean isRollbackOnly(); @Override
2020-08-29 22:53:50
539
原创 JdkDynamicAopProxy代理类invoke方法
1.invoke @Override @Nullable public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object oldProxy = null; boolean setProxyContext = false; TargetSource targetSource = this.advised.targetSource; Object target = n
2020-08-29 16:41:31
432
原创 浅析spring创建代理类
1.demo代码示例public class AopTest { @Test public void test_aop_config(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AopConfig.class); final TestService service = (TestService)ac.getBean("testServiceImpl"); serv
2020-08-29 14:17:53
268
原创 CglibAop代理的小demo
demo代码1.核心测试类public class AopTest { @Test public void test_demo(){ ProxyFactory proxyFactory = new ProxyFactory(); // 一个Advisor代表的是一个已经跟指定切点绑定了的通知 // 在这个例子中意味着环绕通知不会作用到toString方法上 Advisor advisor = new DefaultPointcutAdvisor(new DmzPointc
2020-08-29 09:38:43
257
原创 spring容器启动
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();ac.refresh();ac.register(CycleConfig.class);Spring bean工厂的后置处理器流程图
2020-08-08 12:40:34
212
原创 Netty执行任务队列
runAllTasks(ioTime * (100 - ioRatio) / ioRatio); /** * 轮询任务队列中的所有任务,并通过{@link Runnable#run()}方法运行它们。此方法停止运行 * 任务队列中的任务,如果运行时间超过{@code timeoutNanos},则返回。 */ protected boolean run...
2020-05-02 19:28:50
454
原创 processSelectedKeys
private void processSelectedKeys() { if (selectedKeys != null) { processSelectedKeysOptimized(); } else { processSelectedKeysPlain(selector.selectedKeys()); ...
2020-05-02 18:53:44
403
原创 NioEventLoop的轮训事件
直接看代码: //事件循环 @Override protected void run() { for (;;) { try { try { //hasTasks() 若taskQueue or tailTasks任务队列中有任务 返回false 没有则返回...
2020-05-02 17:33:27
300
原创 Netty优雅退出机制shutdownGracefully源码分析
使用netty开发的小伙伴对netty下面这两句代码应该非常熟悉了,netty的优雅退出机制bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();首先看其中的shutdownGracefully()方法,其中的参数quietPeriod为静默时间,timeout为截止时间,第三个参数是TimeUnit uni...
2020-05-02 16:16:02
1007
原创 NioEventLoopGroup的初始化
NioEventLoopGroup我们先看下类图NioEventLoopGroup workGroup = new NioEventLoopGroup();public NioEventLoopGroup() { this(0); } public NioEventLoopGroup(int nThreads) { this(nTh...
2020-05-02 15:38:19
424
原创 Netty新连接的接入
新连接的建立可以分为三个步骤1.检测到有新的连接2.将新的连接注册到worker线程组3.注册新连接的读事件检测到有新连接的接入我们已经知道,当服务端启动后,服务端channel已经注册到boss reactor线程中,reactor不断检测有新的事件,直到检测出有accept事件发生NioEventLoop.java private void processS...
2020-05-01 21:16:40
205
原创 spring5.1源码编译
1.安装环境配套Gradle 5.6.2+java version "1.8.0_181"+IDEA 2019.2.3+spring framework5.1.x2.从github上下载压缩包,解压到本地3.然后导入到IDEA中,进行编译4.如果环境没有问题应该可以编译通过5.然后跑一下spring-core单元测试下载cglib的jar包...
2019-10-29 08:58:50
483
1
原创 模拟JDK动态代理
package dumu.test.proxy.demo;import javax.tools.JavaCompiler;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;import java.io.File;import java.io.FileWriter;import jav...
2019-10-28 09:15:25
140
原创 从源码角度理解ClassLoader
双亲委派模式工作原理双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是采用组合关系来复用父类加载器的相关代码,类加载器间的关系如下:双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行
2018-02-03 15:18:55
303
原创 2.菜鸟总结spring源码——获取Document
1.上一篇文档大概回顾了Resource resource = new ClassPathResource("beanFactoryTest.xml")的加载机制; 本次回顾从BeanFactory factory = new XmlBeanFactory(resource);这句话开始; public XmlBeanFactory(Resource resource, BeanF
2018-01-29 21:30:57
310
原创 1、菜鸟Spring源码解析总结——Resource
spring学习Resource总结1.spring Resource中类关系图; 2.在日常的开发工作中,资源文件的加载,可以直接使用Spring提供的类,比如: Resource resource = new ClassPathResource("name") InputStream inputStream = resource.getInputStre
2018-01-28 19:32:25
299
原创 mybatis的理解
学习深入浅出Mybatis技术原理与实战的总结第一章:Mybatis简介:Hibernate和Mybatis的对比1:Hibernate 对JDBC封装程度比较高,我们不需要SQL语言,只要使用HQL语言就行了,Herbernate是全表映射,Hibernate屏蔽了SQL,那意味着只能进行全表映射,如果一个表有上百个字段,如果需要只有两个,这样Hibernate就无法进行适应;全
2017-10-07 20:43:31
1686
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人