07 2024 档案
摘要:第十二讲-AOP之proxy增强-cglib 使用Cglib作为代理的例子 package com.cherry.a12; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.
阅读全文
摘要:第十一讲-AOP之动态代理增强JDK JDK实现动态代理需要三个参数: ClassLoader loader, 类加载器,JDK代理是在运行期间生成代理类的字节码,因此需要类加载器在运行时被加载 Class<?>[] interfaces, 需要实现的接口 InvocationHandler h 实
阅读全文
摘要:第十讲-AOP实现之agent(类加载增强) 本讲来讲解使用agent类加载阶段实现功能增强。如下面的代码: 在类加载时使用JVM参数,注意后面的aspectjweaver-1.9.7.jar改成自己的路径: -javaagent:D:/development_tools/mvn_repositor
阅读全文
摘要:第九讲-AOP实现之AspectJ(编译器增强) 该讲使用AspectJ来演示AOP的动态代理(我这里使用JDK1.8来演示) 首先导入相关依赖: <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artif
阅读全文
摘要:共享模型之无锁 本章内容 CAS 与 volatile 原子整数 原子引用 原子累加器 Unsafe 1. 问题提出 有如下需求,保证 account.withdraw 取款方法的线程安全 package org.example.a33; public class AccountTest{ publ
阅读全文
摘要:Java 线程 1. 创建和运行线程 1.1 直接使用 Thread 例如: public class ThreadTest { public static void main(String[] args) { Thread t = new Thread() { public void run(){
阅读全文
摘要:第八讲-Scope作用域 1. Scope类型有哪些 在目前的Spring版本(Spring5)中,关于Scope的类型一共有5种: singleton:每次从容器中返回的bean都是同一个对象 prototype:每次从容器中返回的都会产生新的对象 request:该bean存在于request域
阅读全文
摘要:Bean的多种初始化和销毁手段 Spring提供了多种初始化和销毁的手段,下面我们逐渐了解这些初始化和销毁方法,并了解它们的执行顺序。 1. Spring中三种Bean初始化方式流程 我们在Bean1代码中分别写出三种不同的初始化方式: public class Bean1 implements I
阅读全文
摘要:第六讲-Aware接口和InitializingBean接口 Aware接口的作用是注入一些与容器相关的信息 BeanNameAware注入bean的名字 BeanFactoryAware注入到BeanFaactory容器 ApplicationContextAware注入到ApplicationC
阅读全文
摘要:第五讲 BeanFactory后处理器 BeanFactory后处理器的作用:为BeanFactory提供扩展 编写如下价格Bean: package com.cherry.chapter1.a05; import com.alibaba.druid.pool.DruidDataSource; im
阅读全文
摘要:第四讲 常用的Bean后处理器 Bean后处理器的作用:为Bean生命周期的各个阶段提供一些扩展功能 1. 常见的Bean后处理器 编写相关的Bean package com.cherry.chapter1.a04; import org.slf4j.Logger; import org.slf4j
阅读全文
摘要:第三讲 Bean的生命周期和模板方法 1. Spring 生命周期的各个阶段 首先准备好一个Spring容器: @SpringBootApplication public class A03Application { public static void main(String[] args) {
阅读全文
摘要:第二讲 容器的实现 1. BeanFactory 实现的特点 首先创建一个BeanFactory的实例,在这个示例中田间一些BeanDfinition对象,该对象主要包含bean的定义信息,例如bean的初始化方法,销毁方法,类型,作用域等等 package com.cherry.chapter1.
阅读全文
摘要:第一讲 BeanFactory和ApplicationContext 0. 本系列教程采用的是JDK8版本,SpringBoot 2.5.5版本 1. 容器接口 BeanFactory能做哪些事情? ApplicationContext有哪些扩展功能 事件解耦 我们首先看一个简单一点的SpringB
阅读全文
摘要:Java 内存模型 JMM 1. JMM 的简单概述 JMM 关注的问题是多线程并发访问的原子性,有序性,可见性,原子性再上一章已经重点讲过了,本章重点关注有序性和可见性 JMM即 Java Memory Model, 从Java 的层面定义了主存和工作内存的抽象概念,底层对应着CPU寄存器,缓存,
阅读全文
摘要:共享模型之管道 1. 共享问题 1.1 Java代码的体现 两个线程对初始值为0的静态变量一个做自增,一个做自减,各做5000次,结果会是0吗? package com.cherry; public class Application1 { static int counter = 0; publi
阅读全文
摘要:Java 线程 1. 创建和运行线程 1.1 直接使用 Thread 例如: public class ThreadTest { public static void main(String[] args) { Thread t = new Thread() { public void run(){
阅读全文