- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 Spring源码导读
下载Spring源码spring framework地址:https://github.com/spring-projects/spring-frameworkspringboot地址:https://github.com/spring-projects/spring-bootSpring的7大模块Core,Aop,Dao,Context,Web,Orm,MVCCore:Spring核心模块,所有功能依赖该模块,主要实现OIC。Aop:实现了Aop机制,并提供常用的Aop拦截器D
2020-07-17 23:53:17 486 1
原创 使用ASM实现动态代理
目录demo场景介绍准备工作代码演示本章节演示如何用字节码编织技术实现动态代理,阅读之前请先了解字节码原理。如果了解JVM更加容易理解动态代理的底层实现有两种方法,javasist和ASM,一般情况下,JDK和CGlib都是用的ASM,今天代码演示一下ASM如何实现动态代理。demo场景介绍目标类:TargetService前面类:AspectService生成代理类 :TargetServiceProxy目标:希望生成这样一个类TargetServicePro.
2020-07-12 22:41:42 1508 1
原创 JVM深度理解
为什么要有JVM?java区别于C和C++就在于,java是跨平台的,java程序员不用手动释放内存。所以java语言编译之后是不可以直接生成二进制的可执行文件,C和C++编译后的可执行文件是耦合平台的。因此java编译必须先生成一个中间产物,即class文件。存在class文件的原因就在于:1、java不可直接生成二进制可执行文件。2、java执行中依赖的指令集架构是基于栈的指令集架构。程序在运行时是依赖对于栈的操作的。就好比我们在科学计算器中输入一串式子:(((1+2)*(2+3)+4...
2020-07-02 10:53:30 516 3
原创 Spring源码导读之Spring简介
Spring源码导读目录下载Spring源码Spring的7大模块应用上下文bean工厂两类Processor(理解为Spring的插件)下载Spring源码spring framework地址:git clone https://github.com/spring-projects/spring-framework.git构建spring5源码的一些坑和步骤:https://www.cnblogs.com/houzheng/p/11772510.html..
2020-07-24 17:06:37 253
原创 ConfigurationClassEnhancer
https://blog.csdn.net/andy_zhang2007/article/details/86726507
2020-07-24 15:22:17 244
原创 ConfigurationClassPostProcessor的五种使用案例
Spring源码导读在ConfigurationClassPostProcessor章节,我们跟踪了postProcessBeanDefinitionRegistry处理链路。本章用结合源码查看它的几种用法。对成员类的解析什么是成员类?见 《五种类型的class》案例:public class RegisterMemberClassTest { @Component class InnerClass { } @Component p..
2020-07-24 00:30:34 604
原创 Spring源码导读之ConfigurationClassPostProcessor
种子类也称配置类在上一章AnnotationConfigApplicationContext容器介绍中提到,该容器提供两个成员变量对beanDefinition进行注册。1、scanner: ClassPathBeanDefinitionScanner。扫描指定报下的class文件, 如果被component注解且是top level类,则注册。2、reader: AnnotatedBeanDefinitionReader。注册指定的class文件。这个容器看似太简单了,但...
2020-07-23 20:21:48 251
原创 Spring源码导读之AnnotationConfigApplicationContext
用法scan: 扫描包下的类进行注册register : 指定单个文件进行注册public class AnnotationApplicaton { public static void main(String[] args) { /** * AnnotationConfigApplicationContext的两个成员变量 * ClassPathBeanDefinitionScanner扫描指定包下面的class文件 如果满足条件
2020-07-23 12:58:56 476
原创 Spring源码导读之ClassMedata
Spring源码导读目录五种类型的ClassClassMedataAnnotationMetadataReadingVisitor五种类型的ClassClass类种注释解释有五种类型的Class用一个demo进行说明:/** a) Top level classes 顶层类 */public class TopLevelClass { /** * c) Inner classes (non-static member classes..
2020-07-22 23:44:25 808
原创 Spring源码导读之对注解的扩展
Spring容器实现了对注解的增强扩展包括:注解的合成注解的注解统一的取数模型注解的合成我用一个案例说明演示一下:我们自定义一个注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited//表示可以被注解public @interface TestAnnotation { @AliasFor("attribute") String va.
2020-07-22 22:14:02 462
原创 Spring源码导读之AutowiredAnnotationBeanPostProcessor
通过构造函数注入案例为构造函数加加@Autowire注解,希望Spring通过注解的形式将其注入。DemoDomainServicepublic class DemoDomainService { private DemoWriteService demoWriteService; @Autowired public DemoDomainService(DemoWriteService demoWriteService) { this....
2020-07-22 19:56:48 312
原创 Spring源码导读之BeanPostProcessor
Spring源码导读目录如何感知注册 : PostProcessorRegistrationDelegateBeanPostProcessorCheckerApplicationListenerDetector案例autowiredAnnotationBeanPostProcessor:如何感知在singleton中已经列出bean创建中调用BeanPostProcessor的链路比如看下这条链路的determineConstructorsFromBeanP.
2020-07-22 15:54:14 377
原创 自定义BeanPostProcessor实现注册beanDefinition(模拟实现mabatis scanmapper)
场景:模拟mabatis scanmapper 实现dao。读者可以拷贝我的代码进行跑一波替换一下,注意里面很多包路径需要替换。写一个modelpublic class Model {}写一个仓储接口@Repositorypublic interface ModelMapper { void insert(Model model);}使用工厂模式,这里只是模拟假装实现。public class MapperFactoryBean implements Fact
2020-07-22 09:57:22 402
原创 Spring源码导读之BeanFactoryPostProcessor
Spring源码导读概述两类BeanFactoryPostProcessor:public interface BeanFactoryPostProcessor { /**在标准初始化后修改应用程序上下文的内部bean工厂。所有的bean定义都将被加载,但是还没有bean被实例化。这就允许重写或添加属性,甚至可以添加到渴望被初始化bean中。 */ void postProcessBeanFactory(ConfigurableListableBeanF...
2020-07-22 00:40:39 203
原创 Spring源码导读之Scope解析
Spring为我们提供的scope有: singleton,prototype,request,session,globalSession1、singleton2、prototype:每次调用新建一个Bean的实例3、request: 给每一个http request新建一个Bean实例4、session: 给每一个http session新建一个Bean实例。5、globalSession:这个只在portal应用中有用,给每一个global http session新建一个Bean实例。
2020-07-21 21:39:05 693
原创 Spring源码导读之bean的其他创建方式。
Spring源码导读Spring 创建普通 bean 除了直接创建方式,还有:factory_method, factorybean , 这里还会提一下prototype Bean的创建。factory_method文件配置<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http.
2020-07-20 23:40:16 173
原创 Spring源码导读之基于xml的自动注入解析
什么是自动注入?我们在property中注入属于手动注入如果配置autowire="byName" /autowire="byType"/autowire="constructor"/ autowire="default" 属于自动注入<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="...
2020-07-19 23:16:40 318
原创 自定义BeanPostProcessor实现对象的代理
用户可以自定义BeanPostProcessor,在Spring容器启动过程中,对Bean进行修改。这里演示如何使用BeanPostProcessor对我们的bean进行代理。伏笔:需要自定义一个BeanPostProcessor, 实现其postProcessAfterInitialization (在bean实例化完成之后对bean进行修改)...
2020-07-19 11:12:30 1715
原创 Spring源码导读之解决循环依赖
在SingleTonBean提到AbstractBeanFactory#getBean(java.lang.String) 会先调用一次getSingleton。Object sharedInstance = getSingleton(beanName)这行代码,获取一个singleton,这里的这个sharedInstance ,故名思意是分享的意思。想象这样一个场景:A 依赖 BB 依赖 A那么创建A的时候,为A注入属性时需要注入B,从而触发B的doGetBean,那么B回头也会会触发A
2020-07-19 00:16:47 334
原创 Spring源码导读之创建SingletonBean
目录AbstractApplicationContextDefaultListableBeanFactoryAbstractBeanFactoryDefaultSingletonBeanRegistryAbstractAutowireCapableBeanFactory总结BeanPostProcessor在哪些地方被调用如何解决循环依赖Spring中的Bean如果没有定义其scop,和是否延迟加载的话。它默认是singleton 和 非延迟加载的。这类bea..
2020-07-18 23:12:05 759
原创 使用property文件加载bean
在xml模式下的Bean加载篇章中我们看到容器AbstractRefreshableApplicationContext在方法loadBeanDefinitions中加载我们的beanDefinition,在子类AbstractXmlApplicationContext继承该方法loadBeanDefinitions(DefaultListableBeanFactory) ,指定XmlBeanDefinitionReader进行加载。 /** * Load bean definitions ...
2020-07-18 12:14:00 245
原创 Spring源码导读之xml基础知识
xml基础知识<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/sche
2020-07-17 23:42:03 204
原创 Spring源码导读之Xml文件解析
xml基础知识<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/s...
2020-07-17 23:14:23 243
原创 Spring源码导读之自定义解析xml
public class People { private String name; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return ge.
2020-07-17 23:05:13 163
原创 Spring源码导读之资源加载
资源加载AbstractApplication 实现了ResourceLoader和ResourcePatternResolver。ResourceLoader是加载单个资源的。而时候我们的资源路径可能是以”classpath*“ (代表加载其他jar包资源)开头的,也有可能是带有通配符的,这两种是加载多个资源,这种是通过ResourcePatternResolver加载,ResourcePatternResolver的实现类其实是PathMatchingResourcePatternResolv...
2020-07-17 22:47:22 267
原创 垃圾回收相关概念
返回主博客System.gc()的理解通过System.gc()或者Runtime.getRuntime().gc(),可以显示触发FullGC,同时对年代和新生代的回收,尝试释放被丢弃对象的占用的内存。System.gc() 附带一个免责声明,无法保证及时进行GC,它只是通知JVM,我们希望它进行一次GC。一般GC需要JVM调用,我们无须手动触发,除非我们在编写性能基准测试。当我们调用System.runFinalization() 会强制调用失去引用的对象的finalize()方法。
2020-07-09 00:11:53 140
原创 垃圾回收相关算法
标记阶段: 引用技术算法。标记阶段:可达性分析算法。对象的finalization机制MAT与Jprofiler的GC Roots溯源清除阶段:标记清除算法清除阶段:复制算法清除阶段: 标记压缩算法小结分代收集算法增量收集算法、分区算法垃圾回收相关概念垃圾回收器...
2020-07-06 22:40:57 227
原创 垃圾回收概述
什么是垃圾可以有不同的理解方式侠义且标准的理解要从C++层面理解:没有任何指针指向的内存,程序无法再访问到,但是却占据了内存。这也是标准的内存溢出的理解。(这种理解可以被看做是C++垃圾的定义) 更广义一些,再java层面理解:不在被任何java程序中的引用所指向的内存,是垃圾(这种可以被看做是java的定义,我们java中所说的垃圾就是指这种理解) 再广义一些,就是程序后面的运行,根据需求,不再需要被使用的内存,但是这部分内存还是有指针指向的。(如果再程序中需要再度优化,便可以这样理解,我们可
2020-07-05 19:45:34 155
原创 结合JVM理解String
目录String基本特性String的内存分配String的基本操作字符串拼接操作intern使用StringTable的垃圾回收G1的String去重String基本特性使用""表示,String str = "" 字面量形式,String str = new String("") 。 final 修饰,不可继承 实现了 java.io.Serializable。天然可以跨进程传输 实现了 Comparable<String> 。可排序 实现了 C.
2020-07-05 17:42:04 159
原创 JVM之本地方法栈
本地方法接口native method如Object.getClass() , Thread.start0() ,Thread.resume0()作用:1、考虑效率,想调用C 。2、与操作系统交互。比如线程管理。本地方法都是INVOKESPECIAL ,INVOKESTATIC如:INVOKESPECIAL java/lang/Thread.start0 ()V7、本地方法栈用于管理本地方法的栈结构,内存私有的。具体做法:需要调用本地方法的时候,就会在本地方法..
2020-07-04 21:38:21 407
原创 JVM概述
特点:一次编译(可是是其他语言编译的,JVM只解释字节码就行),到处运行。自动内存管理自动垃圾回收JVM为什么叫虚拟机(程序虚拟机):管理一块内存,解释运行一段程序。JVM位置结构指令集架构:基于栈的指令集架构:需要操作数栈和局部变量表(零地址)Icounst_2istore_1Icounst_3istore_2iload_1iload_2addistore_3基于寄存器的指令集架构:以地址+指令的方式...
2020-06-27 16:53:04 569
运用lambda表达式+策略模式实现平台业务扩展
2019-12-22
运用lambda表达式+策略模式实现平台扩展(Extension)
2019-12-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人