实例介绍
【实例简介】
small-spring:🌱《 Spring 手撸专栏》,本专栏以 Spring 源码学习为目的,通过手写简化版 Spring 框架,了解 Spring 核心原理。在手写的过程中会简化 Spring 源码,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期等等
【实例截图】
【核心代码】
文件清单
└── small-spring-69efcc9835aac100fb99ad2046a75e0b58508233
├── docs
│ ├── assets
│ │ ├── css
│ │ │ ├── gitalk.css
│ │ │ └── vue.css
│ │ ├── excel
│ │ │ └── 简历.xlsx
│ │ ├── img
│ │ │ ├── Bean生命周期.drawio
│ │ │ ├── Bean生命周期.png
│ │ │ ├── bug-10-01.png
│ │ │ ├── bugstack-md.png
│ │ │ ├── HeadDiagram.png
│ │ │ ├── pdf.png
│ │ │ ├── spring-0-04.png
│ │ │ ├── spring-10-02.png
│ │ │ ├── spring-1-01.png
│ │ │ ├── spring-1-02.png
│ │ │ ├── spring-1-03.png
│ │ │ ├── spring-1-04.png
│ │ │ ├── spring-11-02.png
│ │ │ ├── spring-12-02.png
│ │ │ ├── spring-13-02.png
│ │ │ ├── spring-14-02.png
│ │ │ ├── spring-15-02.png
│ │ │ ├── spring-16-02.png
│ │ │ ├── spring-2-00.png
│ │ │ ├── spring-2-01.png
│ │ │ ├── spring-2-02.png
│ │ │ ├── spring-3-01.png
│ │ │ ├── spring-3-02.png
│ │ │ ├── spring-3-03.png
│ │ │ ├── spring-4-01.png
│ │ │ ├── spring-4-02.png
│ │ │ ├── spring-5-02.png
│ │ │ ├── spring-6-03.png
│ │ │ ├── spring-6-04.png
│ │ │ ├── spring-7-03.png
│ │ │ ├── spring-8-04.png
│ │ │ └── spring-9-02.png
│ │ ├── js
│ │ │ ├── docsify.min.js
│ │ │ ├── docsify-pagination.min.js
│ │ │ ├── gitalk.min.js
│ │ │ ├── md5.js
│ │ │ ├── prism-bash.js
│ │ │ ├── prism-java.min.js
│ │ │ └── zoom-image.js
│ │ ├── md
│ │ │ ├── 简历模板-MD.md
│ │ │ └── 简历模板-实习生.md
│ │ ├── ppt
│ │ │ └── 插图.pptx
│ │ ├── visio
│ │ │ └── 类图.vsdx
│ │ ├── word
│ │ │ └── 简历模板-MD.md
│ │ └── xmind
│ │ ├── Spring手撸专栏.xmind
│ │ └── 第9章:Bean 生命周期.xmind
│ ├── CNAME
│ ├── _coverpage.md
│ ├── favicon.ico
│ ├── index.html
│ ├── _media
│ │ ├── bugstack-pdf.png
│ │ ├── bugstack.png
│ │ ├── fustack.png
│ │ ├── icon.svg
│ │ ├── onlinebook.svg
│ │ ├── pdf.png
│ │ ├── qrcode.png
│ │ ├── tree.png
│ │ ├── wechatcode.jpg
│ │ └── wxbugstack.svg
│ ├── notes
│ │ └── 资料.md
│ ├── README.md
│ └── _sidebar.md
├── important.properties
├── LICENSE
├── README.md
├── small-spring-step-01
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── BeanDefinition.java
│ │ └── BeanFactory.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ └── UserService.java
├── small-spring-step-02
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── beans
│ │ ├── BeansException.java
│ │ └── factory
│ │ ├── BeanFactory.java
│ │ ├── config
│ │ │ ├── BeanDefinition.java
│ │ │ └── SingletonBeanRegistry.java
│ │ └── support
│ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ ├── AbstractBeanFactory.java
│ │ ├── BeanDefinitionRegistry.java
│ │ ├── DefaultListableBeanFactory.java
│ │ └── DefaultSingletonBeanRegistry.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ └── UserService.java
├── small-spring-step-03
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── beans
│ │ ├── BeansException.java
│ │ └── factory
│ │ ├── BeanFactory.java
│ │ ├── config
│ │ │ ├── BeanDefinition.java
│ │ │ └── SingletonBeanRegistry.java
│ │ └── support
│ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ ├── AbstractBeanFactory.java
│ │ ├── BeanDefinitionRegistry.java
│ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ ├── DefaultListableBeanFactory.java
│ │ ├── DefaultSingletonBeanRegistry.java
│ │ ├── InstantiationStrategy.java
│ │ └── SimpleInstantiationStrategy.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ └── UserService.java
├── small-spring-step-04
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── beans
│ │ ├── BeansException.java
│ │ ├── factory
│ │ │ ├── BeanFactory.java
│ │ │ ├── config
│ │ │ │ ├── BeanDefinition.java
│ │ │ │ ├── BeanReference.java
│ │ │ │ └── SingletonBeanRegistry.java
│ │ │ └── support
│ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ ├── AbstractBeanFactory.java
│ │ │ ├── BeanDefinitionRegistry.java
│ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ ├── DefaultListableBeanFactory.java
│ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ ├── InstantiationStrategy.java
│ │ │ └── SimpleInstantiationStrategy.java
│ │ ├── PropertyValue.java
│ │ └── PropertyValues.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ ├── UserDao.java
│ └── UserService.java
├── small-spring-step-05
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ ├── important.properties
│ └── spring.xml
├── small-spring-step-06
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ ├── UserDao.java
│ │ │ └── UserService.java
│ │ └── common
│ │ ├── MyBeanFactoryPostProcessor.java
│ │ └── MyBeanPostProcessor.java
│ └── resources
│ ├── important.properties
│ ├── springPostProcessor.xml
│ └── spring.xml
├── small-spring-step-07
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-08
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-09
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserDao.java
│ │ ├── ProxyBeanFactory.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-10
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── event
│ │ ├── ContextClosedEventListener.java
│ │ ├── ContextRefreshedEventListener.java
│ │ ├── CustomEvent.java
│ │ └── CustomEventListener.java
│ └── resources
│ └── spring.xml
├── small-spring-step-11
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── aspectj
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ ├── UserServiceInterceptor.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-12
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ ├── UserServiceBeforeAdvice.java
│ │ ├── UserServiceInterceptor.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-13
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ └── UserService.java
│ └── resources
│ ├── spring-property.xml
│ ├── spring-scan.xml
│ └── token.properties
├── small-spring-step-14
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ ├── spring.xml
│ └── token.properties
├── small-spring-step-15
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ ├── IUserService.java
│ │ │ ├── UserServiceBeforeAdvice.java
│ │ │ └── UserService.java
│ │ └── bean2
│ │ ├── IUserService.java
│ │ ├── UserDao.java
│ │ ├── UserServiceBeforeAdvice.java
│ │ └── UserService.java
│ └── resources
│ ├── spring2.xml
│ ├── spring.xml
│ └── token.properties
├── small-spring-step-16
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── ObjectFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ ├── Husband.java
│ │ │ ├── HusbandMother.java
│ │ │ ├── IMother.java
│ │ │ ├── SpouseAdvice.java
│ │ │ └── Wife.java
│ │ └── CircleTest.java
│ └── resources
│ └── spring.xml
├── small-spring-step-17
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── ObjectFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ ├── ClassPathXmlApplicationContext.java
│ │ │ └── ConversionServiceFactoryBean.java
│ │ ├── core
│ │ │ ├── convert
│ │ │ │ ├── ConversionService.java
│ │ │ │ ├── converter
│ │ │ │ │ ├── ConverterFactory.java
│ │ │ │ │ ├── Converter.java
│ │ │ │ │ ├── ConverterRegistry.java
│ │ │ │ │ └── GenericConverter.java
│ │ │ │ └── support
│ │ │ │ ├── DefaultConversionService.java
│ │ │ │ ├── GenericConversionService.java
│ │ │ │ └── StringToNumberConverterFactory.java
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ ├── NumberUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ └── Husband.java
│ │ └── converter
│ │ ├── ConvertersFactoryBean.java
│ │ ├── StringToIntegerConverter.java
│ │ └── StringToLocalDateConverter.java
│ └── resources
│ └── spring.xml
├── small-spring-step-18
│ ├── pom.xml
│ ├── spring-jdbc.assets
│ │ └── spring-jdbc.png
│ ├── spring-jdbc.md
│ ├── src
│ │ ├── main
│ │ │ └── java
│ │ │ └── cn
│ │ │ └── bugstack
│ │ │ └── springframework
│ │ │ ├── aop
│ │ │ │ ├── AdvisedSupport.java
│ │ │ │ ├── Advisor.java
│ │ │ │ ├── aspectj
│ │ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ │ ├── BeforeAdvice.java
│ │ │ │ ├── ClassFilter.java
│ │ │ │ ├── framework
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ │ ├── AopProxy.java
│ │ │ │ │ ├── autoproxy
│ │ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ │ ├── ProxyFactory.java
│ │ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ │ ├── MethodBeforeAdvice.java
│ │ │ │ ├── MethodMatcher.java
│ │ │ │ ├── PointcutAdvisor.java
│ │ │ │ ├── Pointcut.java
│ │ │ │ └── TargetSource.java
│ │ │ ├── beans
│ │ │ │ ├── BeansException.java
│ │ │ │ ├── factory
│ │ │ │ │ ├── annotation
│ │ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ │ ├── Autowired.java
│ │ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ │ └── Value.java
│ │ │ │ │ ├── Aware.java
│ │ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ │ ├── BeanFactory.java
│ │ │ │ │ ├── BeanNameAware.java
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ │ ├── DisposableBean.java
│ │ │ │ │ ├── FactoryBean.java
│ │ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ │ ├── InitializingBean.java
│ │ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ │ ├── ObjectFactory.java
│ │ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ │ ├── support
│ │ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ │ └── xml
│ │ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ │ ├── PropertyValue.java
│ │ │ │ └── PropertyValues.java
│ │ │ ├── context
│ │ │ │ ├── annotation
│ │ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ │ └── Scope.java
│ │ │ │ ├── ApplicationContextAware.java
│ │ │ │ ├── ApplicationContext.java
│ │ │ │ ├── ApplicationEvent.java
│ │ │ │ ├── ApplicationEventPublisher.java
│ │ │ │ ├── ApplicationListener.java
│ │ │ │ ├── ConfigurableApplicationContext.java
│ │ │ │ ├── event
│ │ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ │ └── support
│ │ │ │ ├── AbstractApplicationContext.java
│ │ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ │ ├── ClassPathXmlApplicationContext.java
│ │ │ │ └── ConversionServiceFactoryBean.java
│ │ │ ├── core
│ │ │ │ ├── convert
│ │ │ │ │ ├── ConversionService.java
│ │ │ │ │ ├── converter
│ │ │ │ │ │ ├── ConverterFactory.java
│ │ │ │ │ │ ├── Converter.java
│ │ │ │ │ │ ├── ConverterRegistry.java
│ │ │ │ │ │ └── GenericConverter.java
│ │ │ │ │ └── support
│ │ │ │ │ ├── DefaultConversionService.java
│ │ │ │ │ ├── GenericConversionService.java
│ │ │ │ │ └── StringToNumberConverterFactory.java
│ │ │ │ └── io
│ │ │ │ ├── ClassPathResource.java
│ │ │ │ ├── DefaultResourceLoader.java
│ │ │ │ ├── FileSystemResource.java
│ │ │ │ ├── Resource.java
│ │ │ │ ├── ResourceLoader.java
│ │ │ │ └── UrlResource.java
│ │ │ ├── jdbc
│ │ │ │ ├── CannotGetJdbcConnectionException.java
│ │ │ │ ├── core
│ │ │ │ │ ├── ArgumentPreparedStatementSetter.java
│ │ │ │ │ ├── ColumnMapRowMapper.java
│ │ │ │ │ ├── JdbcOperations.java
│ │ │ │ │ ├── PreparedStatementCallback.java
│ │ │ │ │ ├── PreparedStatementCreator.java
│ │ │ │ │ ├── PreparedStatementSetter.java
│ │ │ │ │ ├── ResultSetExtractor.java
│ │ │ │ │ ├── RowMapper.java
│ │ │ │ │ ├── RowMapperResultSetExtractor.java
│ │ │ │ │ ├── SingleColumnRowMapper.java
│ │ │ │ │ ├── SqlProvider.java
│ │ │ │ │ └── StatementCallback.java
│ │ │ │ ├── datasource
│ │ │ │ │ ├── ConnectionHandler.java
│ │ │ │ │ ├── ConnectionHolder.java
│ │ │ │ │ ├── DataSourceUtils.java
│ │ │ │ │ └── SimpleConnectionHandler.java
│ │ │ │ ├── IncorrectResultSetColumnCountException.java
│ │ │ │ ├── support
│ │ │ │ │ ├── JdbcAccessor.java
│ │ │ │ │ ├── JdbcTemplate.java
│ │ │ │ │ └── JdbcUtils.java
│ │ │ │ └── UncategorizedSQLException.java
│ │ │ ├── stereotype
│ │ │ │ └── Component.java
│ │ │ └── util
│ │ │ ├── ClassUtils.java
│ │ │ ├── NumberUtils.java
│ │ │ └── StringValueResolver.java
│ │ └── test
│ │ ├── java
│ │ │ └── cn
│ │ │ └── bugstack
│ │ │ └── springframework
│ │ │ └── test
│ │ │ ├── ApiTest.java
│ │ │ └── JdbcTest.java
│ │ └── resources
│ │ └── spring.xml
│ └── target
│ └── test-classes
│ └── spring.xml
└── small-spring-step-19
├── pom.xml
├── spring-tx.assets
│ ├── image-20220311122257080.png
│ ├── image-20220311123222599.png
│ ├── image-20220311134037268.png
│ ├── image-20220311140602393.png
│ ├── image-20220311153945876.png
│ └── spring-tx.png
├── spring-tx.md
├── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ ├── support
│ │ │ │ ├── AbstractBeanFactoryPointcutAdvisor.java
│ │ │ │ ├── AbstractPointcutAdvisor.java
│ │ │ │ ├── StaticMethodMatcher.java
│ │ │ │ └── StaticMethodMatcherPointcut.java
│ │ │ ├── TargetSource.java
│ │ │ └── TrueClassFilter.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── ObjectFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ ├── ClassPathXmlApplicationContext.java
│ │ │ └── ConversionServiceFactoryBean.java
│ │ ├── core
│ │ │ ├── annotation
│ │ │ │ ├── AbstractAliasAwareAnnotationAttributeExtractor.java
│ │ │ │ ├── AliasFor.java
│ │ │ │ ├── AnnotatedElementUtils.java
│ │ │ │ ├── AnnotationAttributeExtractor.java
│ │ │ │ ├── AnnotationAttributes.java
│ │ │ │ ├── AnnotationConfigurationException.java
│ │ │ │ ├── AnnotationUtils.java
│ │ │ │ ├── DefaultAnnotationAttributeExtractor.java
│ │ │ │ ├── SynthesizedAnnotationInvocationHandler.java
│ │ │ │ └── SynthesizedAnnotation.java
│ │ │ ├── BridgeMethodResolver.java
│ │ │ ├── convert
│ │ │ │ ├── ConversionService.java
│ │ │ │ ├── converter
│ │ │ │ │ ├── ConverterFactory.java
│ │ │ │ │ ├── Converter.java
│ │ │ │ │ ├── ConverterRegistry.java
│ │ │ │ │ └── GenericConverter.java
│ │ │ │ └── support
│ │ │ │ ├── DefaultConversionService.java
│ │ │ │ ├── GenericConversionService.java
│ │ │ │ └── StringToNumberConverterFactory.java
│ │ │ ├── GraalDetector.java
│ │ │ ├── io
│ │ │ │ ├── ClassPathResource.java
│ │ │ │ ├── DefaultResourceLoader.java
│ │ │ │ ├── FileSystemResource.java
│ │ │ │ ├── Resource.java
│ │ │ │ ├── ResourceLoader.java
│ │ │ │ └── UrlResource.java
│ │ │ ├── MethodClassKey.java
│ │ │ ├── MethodParameter.java
│ │ │ ├── ResolvableType.java
│ │ │ ├── SerializableTypeWrapper.java
│ │ │ └── util
│ │ │ ├── ConcurrentReferenceHashMap.java
│ │ │ ├── ObjectUtils.java
│ │ │ └── StringUtils.java
│ │ ├── jdbc
│ │ │ ├── CannotGetJdbcConnectionException.java
│ │ │ ├── core
│ │ │ │ ├── ArgumentPreparedStatementSetter.java
│ │ │ │ ├── ColumnMapRowMapper.java
│ │ │ │ ├── JdbcOperations.java
│ │ │ │ ├── PreparedStatementCallback.java
│ │ │ │ ├── PreparedStatementCreator.java
│ │ │ │ ├── PreparedStatementSetter.java
│ │ │ │ ├── ResultSetExtractor.java
│ │ │ │ ├── RowMapper.java
│ │ │ │ ├── RowMapperResultSetExtractor.java
│ │ │ │ ├── SingleColumnRowMapper.java
│ │ │ │ ├── SqlProvider.java
│ │ │ │ └── StatementCallback.java
│ │ │ ├── datasource
│ │ │ │ ├── ConnectionHandler.java
│ │ │ │ ├── ConnectionHolder.java
│ │ │ │ ├── DataSourceTransactionManager.java
│ │ │ │ ├── DataSourceUtils.java
│ │ │ │ ├── JdbcTransactionObjectSupport.java
│ │ │ │ └── SimpleConnectionHandler.java
│ │ │ ├── IncorrectResultSetColumnCountException.java
│ │ │ ├── support
│ │ │ │ ├── JdbcAccessor.java
│ │ │ │ ├── JdbcTemplate.java
│ │ │ │ └── JdbcUtils.java
│ │ │ └── UncategorizedSQLException.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ ├── tx
│ │ │ └── transaction
│ │ │ ├── annotation
│ │ │ │ ├── AnnotationTransactionAttributeSource.java
│ │ │ │ ├── SpringTransactionAnnotationParser.java
│ │ │ │ ├── Transactional.java
│ │ │ │ └── TransactionAnnotationParser.java
│ │ │ ├── CannotCreateTransactionException.java
│ │ │ ├── interceptor
│ │ │ │ ├── AbstractFallbackTransactionAttributeSource.java
│ │ │ │ ├── BeanFactoryTransactionAttributeSourceAdvisor.java
│ │ │ │ ├── DefaultTransactionAttribute.java
│ │ │ │ ├── DelegatingTransactionAttribute.java
│ │ │ │ ├── RollbackRuleAttribute.java
│ │ │ │ ├── RuleBasedTransactionAttribute.java
│ │ │ │ ├── TransactionAspectSupport.java
│ │ │ │ ├── TransactionAttribute.java
│ │ │ │ ├── TransactionAttributeSource.java
│ │ │ │ ├── TransactionAttributeSourcePointcut.java
│ │ │ │ └── TransactionInterceptor.java
│ │ │ ├── NestedTransactionNotSupportedException.java
│ │ │ ├── PlatformTransactionManager.java
│ │ │ ├── SavepointManager.java
│ │ │ ├── support
│ │ │ │ ├── AbstractPlatformTransactionManager.java
│ │ │ │ ├── AbstractTransactionStatus.java
│ │ │ │ ├── DefaultTransactionDefinition.java
│ │ │ │ ├── DefaultTransactionStatus.java
│ │ │ │ ├── DelegatingTransactionDefinition.java
│ │ │ │ ├── TransactionSynchronizationManager.java
│ │ │ │ └── TransactionSynchronizationUtils.java
│ │ │ ├── TransactionDefinition.java
│ │ │ ├── TransactionException.java
│ │ │ └── TransactionStatus.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ ├── NumberUtils.java
│ │ ├── ReflectionUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── JdbcTest.java
│ │ ├── service
│ │ │ ├── impl
│ │ │ │ └── JdbcServiceImpl.java
│ │ │ └── JdbcService.java
│ │ └── TransactionProxy.java
│ └── resources
│ └── spring.xml
└── target
└── test-classes
└── spring.xml
562 directories, 1395 files
small-spring:🌱《 Spring 手撸专栏》,本专栏以 Spring 源码学习为目的,通过手写简化版 Spring 框架,了解 Spring 核心原理。在手写的过程中会简化 Spring 源码,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期等等
【实例截图】
【核心代码】
文件清单
└── small-spring-69efcc9835aac100fb99ad2046a75e0b58508233
├── docs
│ ├── assets
│ │ ├── css
│ │ │ ├── gitalk.css
│ │ │ └── vue.css
│ │ ├── excel
│ │ │ └── 简历.xlsx
│ │ ├── img
│ │ │ ├── Bean生命周期.drawio
│ │ │ ├── Bean生命周期.png
│ │ │ ├── bug-10-01.png
│ │ │ ├── bugstack-md.png
│ │ │ ├── HeadDiagram.png
│ │ │ ├── pdf.png
│ │ │ ├── spring-0-04.png
│ │ │ ├── spring-10-02.png
│ │ │ ├── spring-1-01.png
│ │ │ ├── spring-1-02.png
│ │ │ ├── spring-1-03.png
│ │ │ ├── spring-1-04.png
│ │ │ ├── spring-11-02.png
│ │ │ ├── spring-12-02.png
│ │ │ ├── spring-13-02.png
│ │ │ ├── spring-14-02.png
│ │ │ ├── spring-15-02.png
│ │ │ ├── spring-16-02.png
│ │ │ ├── spring-2-00.png
│ │ │ ├── spring-2-01.png
│ │ │ ├── spring-2-02.png
│ │ │ ├── spring-3-01.png
│ │ │ ├── spring-3-02.png
│ │ │ ├── spring-3-03.png
│ │ │ ├── spring-4-01.png
│ │ │ ├── spring-4-02.png
│ │ │ ├── spring-5-02.png
│ │ │ ├── spring-6-03.png
│ │ │ ├── spring-6-04.png
│ │ │ ├── spring-7-03.png
│ │ │ ├── spring-8-04.png
│ │ │ └── spring-9-02.png
│ │ ├── js
│ │ │ ├── docsify.min.js
│ │ │ ├── docsify-pagination.min.js
│ │ │ ├── gitalk.min.js
│ │ │ ├── md5.js
│ │ │ ├── prism-bash.js
│ │ │ ├── prism-java.min.js
│ │ │ └── zoom-image.js
│ │ ├── md
│ │ │ ├── 简历模板-MD.md
│ │ │ └── 简历模板-实习生.md
│ │ ├── ppt
│ │ │ └── 插图.pptx
│ │ ├── visio
│ │ │ └── 类图.vsdx
│ │ ├── word
│ │ │ └── 简历模板-MD.md
│ │ └── xmind
│ │ ├── Spring手撸专栏.xmind
│ │ └── 第9章:Bean 生命周期.xmind
│ ├── CNAME
│ ├── _coverpage.md
│ ├── favicon.ico
│ ├── index.html
│ ├── _media
│ │ ├── bugstack-pdf.png
│ │ ├── bugstack.png
│ │ ├── fustack.png
│ │ ├── icon.svg
│ │ ├── onlinebook.svg
│ │ ├── pdf.png
│ │ ├── qrcode.png
│ │ ├── tree.png
│ │ ├── wechatcode.jpg
│ │ └── wxbugstack.svg
│ ├── notes
│ │ └── 资料.md
│ ├── README.md
│ └── _sidebar.md
├── important.properties
├── LICENSE
├── README.md
├── small-spring-step-01
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── BeanDefinition.java
│ │ └── BeanFactory.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ └── UserService.java
├── small-spring-step-02
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── beans
│ │ ├── BeansException.java
│ │ └── factory
│ │ ├── BeanFactory.java
│ │ ├── config
│ │ │ ├── BeanDefinition.java
│ │ │ └── SingletonBeanRegistry.java
│ │ └── support
│ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ ├── AbstractBeanFactory.java
│ │ ├── BeanDefinitionRegistry.java
│ │ ├── DefaultListableBeanFactory.java
│ │ └── DefaultSingletonBeanRegistry.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ └── UserService.java
├── small-spring-step-03
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── beans
│ │ ├── BeansException.java
│ │ └── factory
│ │ ├── BeanFactory.java
│ │ ├── config
│ │ │ ├── BeanDefinition.java
│ │ │ └── SingletonBeanRegistry.java
│ │ └── support
│ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ ├── AbstractBeanFactory.java
│ │ ├── BeanDefinitionRegistry.java
│ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ ├── DefaultListableBeanFactory.java
│ │ ├── DefaultSingletonBeanRegistry.java
│ │ ├── InstantiationStrategy.java
│ │ └── SimpleInstantiationStrategy.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ └── UserService.java
├── small-spring-step-04
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── beans
│ │ ├── BeansException.java
│ │ ├── factory
│ │ │ ├── BeanFactory.java
│ │ │ ├── config
│ │ │ │ ├── BeanDefinition.java
│ │ │ │ ├── BeanReference.java
│ │ │ │ └── SingletonBeanRegistry.java
│ │ │ └── support
│ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ ├── AbstractBeanFactory.java
│ │ │ ├── BeanDefinitionRegistry.java
│ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ ├── DefaultListableBeanFactory.java
│ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ ├── InstantiationStrategy.java
│ │ │ └── SimpleInstantiationStrategy.java
│ │ ├── PropertyValue.java
│ │ └── PropertyValues.java
│ └── test
│ └── java
│ └── cn
│ └── bugstack
│ └── springframework
│ └── test
│ ├── ApiTest.java
│ └── bean
│ ├── UserDao.java
│ └── UserService.java
├── small-spring-step-05
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ ├── important.properties
│ └── spring.xml
├── small-spring-step-06
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ ├── UserDao.java
│ │ │ └── UserService.java
│ │ └── common
│ │ ├── MyBeanFactoryPostProcessor.java
│ │ └── MyBeanPostProcessor.java
│ └── resources
│ ├── important.properties
│ ├── springPostProcessor.xml
│ └── spring.xml
├── small-spring-step-07
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-08
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-09
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserDao.java
│ │ ├── ProxyBeanFactory.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-10
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── event
│ │ ├── ContextClosedEventListener.java
│ │ ├── ContextRefreshedEventListener.java
│ │ ├── CustomEvent.java
│ │ └── CustomEventListener.java
│ └── resources
│ └── spring.xml
├── small-spring-step-11
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── aspectj
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ ├── UserServiceInterceptor.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-12
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ ├── UserServiceBeforeAdvice.java
│ │ ├── UserServiceInterceptor.java
│ │ └── UserService.java
│ └── resources
│ └── spring.xml
├── small-spring-step-13
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ └── ClassUtils.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ └── UserService.java
│ └── resources
│ ├── spring-property.xml
│ ├── spring-scan.xml
│ └── token.properties
├── small-spring-step-14
│ ├── LICENSE
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ └── bean
│ │ ├── IUserService.java
│ │ ├── UserDao.java
│ │ └── UserService.java
│ └── resources
│ ├── spring.xml
│ └── token.properties
├── small-spring-step-15
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ ├── IUserService.java
│ │ │ ├── UserServiceBeforeAdvice.java
│ │ │ └── UserService.java
│ │ └── bean2
│ │ ├── IUserService.java
│ │ ├── UserDao.java
│ │ ├── UserServiceBeforeAdvice.java
│ │ └── UserService.java
│ └── resources
│ ├── spring2.xml
│ ├── spring.xml
│ └── token.properties
├── small-spring-step-16
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── ObjectFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ └── ClassPathXmlApplicationContext.java
│ │ ├── core
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ ├── Husband.java
│ │ │ ├── HusbandMother.java
│ │ │ ├── IMother.java
│ │ │ ├── SpouseAdvice.java
│ │ │ └── Wife.java
│ │ └── CircleTest.java
│ └── resources
│ └── spring.xml
├── small-spring-step-17
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ └── TargetSource.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── ObjectFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ ├── ClassPathXmlApplicationContext.java
│ │ │ └── ConversionServiceFactoryBean.java
│ │ ├── core
│ │ │ ├── convert
│ │ │ │ ├── ConversionService.java
│ │ │ │ ├── converter
│ │ │ │ │ ├── ConverterFactory.java
│ │ │ │ │ ├── Converter.java
│ │ │ │ │ ├── ConverterRegistry.java
│ │ │ │ │ └── GenericConverter.java
│ │ │ │ └── support
│ │ │ │ ├── DefaultConversionService.java
│ │ │ │ ├── GenericConversionService.java
│ │ │ │ └── StringToNumberConverterFactory.java
│ │ │ └── io
│ │ │ ├── ClassPathResource.java
│ │ │ ├── DefaultResourceLoader.java
│ │ │ ├── FileSystemResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceLoader.java
│ │ │ └── UrlResource.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ ├── NumberUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── bean
│ │ │ └── Husband.java
│ │ └── converter
│ │ ├── ConvertersFactoryBean.java
│ │ ├── StringToIntegerConverter.java
│ │ └── StringToLocalDateConverter.java
│ └── resources
│ └── spring.xml
├── small-spring-step-18
│ ├── pom.xml
│ ├── spring-jdbc.assets
│ │ └── spring-jdbc.png
│ ├── spring-jdbc.md
│ ├── src
│ │ ├── main
│ │ │ └── java
│ │ │ └── cn
│ │ │ └── bugstack
│ │ │ └── springframework
│ │ │ ├── aop
│ │ │ │ ├── AdvisedSupport.java
│ │ │ │ ├── Advisor.java
│ │ │ │ ├── aspectj
│ │ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ │ ├── BeforeAdvice.java
│ │ │ │ ├── ClassFilter.java
│ │ │ │ ├── framework
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ │ ├── AopProxy.java
│ │ │ │ │ ├── autoproxy
│ │ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ │ ├── ProxyFactory.java
│ │ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ │ ├── MethodBeforeAdvice.java
│ │ │ │ ├── MethodMatcher.java
│ │ │ │ ├── PointcutAdvisor.java
│ │ │ │ ├── Pointcut.java
│ │ │ │ └── TargetSource.java
│ │ │ ├── beans
│ │ │ │ ├── BeansException.java
│ │ │ │ ├── factory
│ │ │ │ │ ├── annotation
│ │ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ │ ├── Autowired.java
│ │ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ │ └── Value.java
│ │ │ │ │ ├── Aware.java
│ │ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ │ ├── BeanFactory.java
│ │ │ │ │ ├── BeanNameAware.java
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ │ ├── DisposableBean.java
│ │ │ │ │ ├── FactoryBean.java
│ │ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ │ ├── InitializingBean.java
│ │ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ │ ├── ObjectFactory.java
│ │ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ │ ├── support
│ │ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ │ └── xml
│ │ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ │ ├── PropertyValue.java
│ │ │ │ └── PropertyValues.java
│ │ │ ├── context
│ │ │ │ ├── annotation
│ │ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ │ └── Scope.java
│ │ │ │ ├── ApplicationContextAware.java
│ │ │ │ ├── ApplicationContext.java
│ │ │ │ ├── ApplicationEvent.java
│ │ │ │ ├── ApplicationEventPublisher.java
│ │ │ │ ├── ApplicationListener.java
│ │ │ │ ├── ConfigurableApplicationContext.java
│ │ │ │ ├── event
│ │ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ │ └── support
│ │ │ │ ├── AbstractApplicationContext.java
│ │ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ │ ├── ClassPathXmlApplicationContext.java
│ │ │ │ └── ConversionServiceFactoryBean.java
│ │ │ ├── core
│ │ │ │ ├── convert
│ │ │ │ │ ├── ConversionService.java
│ │ │ │ │ ├── converter
│ │ │ │ │ │ ├── ConverterFactory.java
│ │ │ │ │ │ ├── Converter.java
│ │ │ │ │ │ ├── ConverterRegistry.java
│ │ │ │ │ │ └── GenericConverter.java
│ │ │ │ │ └── support
│ │ │ │ │ ├── DefaultConversionService.java
│ │ │ │ │ ├── GenericConversionService.java
│ │ │ │ │ └── StringToNumberConverterFactory.java
│ │ │ │ └── io
│ │ │ │ ├── ClassPathResource.java
│ │ │ │ ├── DefaultResourceLoader.java
│ │ │ │ ├── FileSystemResource.java
│ │ │ │ ├── Resource.java
│ │ │ │ ├── ResourceLoader.java
│ │ │ │ └── UrlResource.java
│ │ │ ├── jdbc
│ │ │ │ ├── CannotGetJdbcConnectionException.java
│ │ │ │ ├── core
│ │ │ │ │ ├── ArgumentPreparedStatementSetter.java
│ │ │ │ │ ├── ColumnMapRowMapper.java
│ │ │ │ │ ├── JdbcOperations.java
│ │ │ │ │ ├── PreparedStatementCallback.java
│ │ │ │ │ ├── PreparedStatementCreator.java
│ │ │ │ │ ├── PreparedStatementSetter.java
│ │ │ │ │ ├── ResultSetExtractor.java
│ │ │ │ │ ├── RowMapper.java
│ │ │ │ │ ├── RowMapperResultSetExtractor.java
│ │ │ │ │ ├── SingleColumnRowMapper.java
│ │ │ │ │ ├── SqlProvider.java
│ │ │ │ │ └── StatementCallback.java
│ │ │ │ ├── datasource
│ │ │ │ │ ├── ConnectionHandler.java
│ │ │ │ │ ├── ConnectionHolder.java
│ │ │ │ │ ├── DataSourceUtils.java
│ │ │ │ │ └── SimpleConnectionHandler.java
│ │ │ │ ├── IncorrectResultSetColumnCountException.java
│ │ │ │ ├── support
│ │ │ │ │ ├── JdbcAccessor.java
│ │ │ │ │ ├── JdbcTemplate.java
│ │ │ │ │ └── JdbcUtils.java
│ │ │ │ └── UncategorizedSQLException.java
│ │ │ ├── stereotype
│ │ │ │ └── Component.java
│ │ │ └── util
│ │ │ ├── ClassUtils.java
│ │ │ ├── NumberUtils.java
│ │ │ └── StringValueResolver.java
│ │ └── test
│ │ ├── java
│ │ │ └── cn
│ │ │ └── bugstack
│ │ │ └── springframework
│ │ │ └── test
│ │ │ ├── ApiTest.java
│ │ │ └── JdbcTest.java
│ │ └── resources
│ │ └── spring.xml
│ └── target
│ └── test-classes
│ └── spring.xml
└── small-spring-step-19
├── pom.xml
├── spring-tx.assets
│ ├── image-20220311122257080.png
│ ├── image-20220311123222599.png
│ ├── image-20220311134037268.png
│ ├── image-20220311140602393.png
│ ├── image-20220311153945876.png
│ └── spring-tx.png
├── spring-tx.md
├── src
│ ├── main
│ │ └── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ ├── aop
│ │ │ ├── AdvisedSupport.java
│ │ │ ├── Advisor.java
│ │ │ ├── aspectj
│ │ │ │ ├── AspectJExpressionPointcutAdvisor.java
│ │ │ │ └── AspectJExpressionPointcut.java
│ │ │ ├── BeforeAdvice.java
│ │ │ ├── ClassFilter.java
│ │ │ ├── framework
│ │ │ │ ├── adapter
│ │ │ │ │ └── MethodBeforeAdviceInterceptor.java
│ │ │ │ ├── AopProxy.java
│ │ │ │ ├── autoproxy
│ │ │ │ │ └── DefaultAdvisorAutoProxyCreator.java
│ │ │ │ ├── Cglib2AopProxy.java
│ │ │ │ ├── JdkDynamicAopProxy.java
│ │ │ │ ├── ProxyFactory.java
│ │ │ │ └── ReflectiveMethodInvocation.java
│ │ │ ├── MethodBeforeAdvice.java
│ │ │ ├── MethodMatcher.java
│ │ │ ├── PointcutAdvisor.java
│ │ │ ├── Pointcut.java
│ │ │ ├── support
│ │ │ │ ├── AbstractBeanFactoryPointcutAdvisor.java
│ │ │ │ ├── AbstractPointcutAdvisor.java
│ │ │ │ ├── StaticMethodMatcher.java
│ │ │ │ └── StaticMethodMatcherPointcut.java
│ │ │ ├── TargetSource.java
│ │ │ └── TrueClassFilter.java
│ │ ├── beans
│ │ │ ├── BeansException.java
│ │ │ ├── factory
│ │ │ │ ├── annotation
│ │ │ │ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ │ │ │ ├── Autowired.java
│ │ │ │ │ ├── Qualifier.java
│ │ │ │ │ └── Value.java
│ │ │ │ ├── Aware.java
│ │ │ │ ├── BeanClassLoaderAware.java
│ │ │ │ ├── BeanFactoryAware.java
│ │ │ │ ├── BeanFactory.java
│ │ │ │ ├── BeanNameAware.java
│ │ │ │ ├── config
│ │ │ │ │ ├── AutowireCapableBeanFactory.java
│ │ │ │ │ ├── BeanDefinition.java
│ │ │ │ │ ├── BeanFactoryPostProcessor.java
│ │ │ │ │ ├── BeanPostProcessor.java
│ │ │ │ │ ├── BeanReference.java
│ │ │ │ │ ├── ConfigurableBeanFactory.java
│ │ │ │ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ │ │ │ └── SingletonBeanRegistry.java
│ │ │ │ ├── ConfigurableListableBeanFactory.java
│ │ │ │ ├── DisposableBean.java
│ │ │ │ ├── FactoryBean.java
│ │ │ │ ├── HierarchicalBeanFactory.java
│ │ │ │ ├── InitializingBean.java
│ │ │ │ ├── ListableBeanFactory.java
│ │ │ │ ├── ObjectFactory.java
│ │ │ │ ├── PropertyPlaceholderConfigurer.java
│ │ │ │ ├── support
│ │ │ │ │ ├── AbstractAutowireCapableBeanFactory.java
│ │ │ │ │ ├── AbstractBeanDefinitionReader.java
│ │ │ │ │ ├── AbstractBeanFactory.java
│ │ │ │ │ ├── BeanDefinitionReader.java
│ │ │ │ │ ├── BeanDefinitionRegistry.java
│ │ │ │ │ ├── CglibSubclassingInstantiationStrategy.java
│ │ │ │ │ ├── DefaultListableBeanFactory.java
│ │ │ │ │ ├── DefaultSingletonBeanRegistry.java
│ │ │ │ │ ├── DisposableBeanAdapter.java
│ │ │ │ │ ├── FactoryBeanRegistrySupport.java
│ │ │ │ │ ├── InstantiationStrategy.java
│ │ │ │ │ └── SimpleInstantiationStrategy.java
│ │ │ │ └── xml
│ │ │ │ └── XmlBeanDefinitionReader.java
│ │ │ ├── PropertyValue.java
│ │ │ └── PropertyValues.java
│ │ ├── context
│ │ │ ├── annotation
│ │ │ │ ├── ClassPathBeanDefinitionScanner.java
│ │ │ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ │ │ └── Scope.java
│ │ │ ├── ApplicationContextAware.java
│ │ │ ├── ApplicationContext.java
│ │ │ ├── ApplicationEvent.java
│ │ │ ├── ApplicationEventPublisher.java
│ │ │ ├── ApplicationListener.java
│ │ │ ├── ConfigurableApplicationContext.java
│ │ │ ├── event
│ │ │ │ ├── AbstractApplicationEventMulticaster.java
│ │ │ │ ├── ApplicationContextEvent.java
│ │ │ │ ├── ApplicationEventMulticaster.java
│ │ │ │ ├── ContextClosedEvent.java
│ │ │ │ ├── ContextRefreshedEvent.java
│ │ │ │ └── SimpleApplicationEventMulticaster.java
│ │ │ └── support
│ │ │ ├── AbstractApplicationContext.java
│ │ │ ├── AbstractRefreshableApplicationContext.java
│ │ │ ├── AbstractXmlApplicationContext.java
│ │ │ ├── ApplicationContextAwareProcessor.java
│ │ │ ├── ClassPathXmlApplicationContext.java
│ │ │ └── ConversionServiceFactoryBean.java
│ │ ├── core
│ │ │ ├── annotation
│ │ │ │ ├── AbstractAliasAwareAnnotationAttributeExtractor.java
│ │ │ │ ├── AliasFor.java
│ │ │ │ ├── AnnotatedElementUtils.java
│ │ │ │ ├── AnnotationAttributeExtractor.java
│ │ │ │ ├── AnnotationAttributes.java
│ │ │ │ ├── AnnotationConfigurationException.java
│ │ │ │ ├── AnnotationUtils.java
│ │ │ │ ├── DefaultAnnotationAttributeExtractor.java
│ │ │ │ ├── SynthesizedAnnotationInvocationHandler.java
│ │ │ │ └── SynthesizedAnnotation.java
│ │ │ ├── BridgeMethodResolver.java
│ │ │ ├── convert
│ │ │ │ ├── ConversionService.java
│ │ │ │ ├── converter
│ │ │ │ │ ├── ConverterFactory.java
│ │ │ │ │ ├── Converter.java
│ │ │ │ │ ├── ConverterRegistry.java
│ │ │ │ │ └── GenericConverter.java
│ │ │ │ └── support
│ │ │ │ ├── DefaultConversionService.java
│ │ │ │ ├── GenericConversionService.java
│ │ │ │ └── StringToNumberConverterFactory.java
│ │ │ ├── GraalDetector.java
│ │ │ ├── io
│ │ │ │ ├── ClassPathResource.java
│ │ │ │ ├── DefaultResourceLoader.java
│ │ │ │ ├── FileSystemResource.java
│ │ │ │ ├── Resource.java
│ │ │ │ ├── ResourceLoader.java
│ │ │ │ └── UrlResource.java
│ │ │ ├── MethodClassKey.java
│ │ │ ├── MethodParameter.java
│ │ │ ├── ResolvableType.java
│ │ │ ├── SerializableTypeWrapper.java
│ │ │ └── util
│ │ │ ├── ConcurrentReferenceHashMap.java
│ │ │ ├── ObjectUtils.java
│ │ │ └── StringUtils.java
│ │ ├── jdbc
│ │ │ ├── CannotGetJdbcConnectionException.java
│ │ │ ├── core
│ │ │ │ ├── ArgumentPreparedStatementSetter.java
│ │ │ │ ├── ColumnMapRowMapper.java
│ │ │ │ ├── JdbcOperations.java
│ │ │ │ ├── PreparedStatementCallback.java
│ │ │ │ ├── PreparedStatementCreator.java
│ │ │ │ ├── PreparedStatementSetter.java
│ │ │ │ ├── ResultSetExtractor.java
│ │ │ │ ├── RowMapper.java
│ │ │ │ ├── RowMapperResultSetExtractor.java
│ │ │ │ ├── SingleColumnRowMapper.java
│ │ │ │ ├── SqlProvider.java
│ │ │ │ └── StatementCallback.java
│ │ │ ├── datasource
│ │ │ │ ├── ConnectionHandler.java
│ │ │ │ ├── ConnectionHolder.java
│ │ │ │ ├── DataSourceTransactionManager.java
│ │ │ │ ├── DataSourceUtils.java
│ │ │ │ ├── JdbcTransactionObjectSupport.java
│ │ │ │ └── SimpleConnectionHandler.java
│ │ │ ├── IncorrectResultSetColumnCountException.java
│ │ │ ├── support
│ │ │ │ ├── JdbcAccessor.java
│ │ │ │ ├── JdbcTemplate.java
│ │ │ │ └── JdbcUtils.java
│ │ │ └── UncategorizedSQLException.java
│ │ ├── stereotype
│ │ │ └── Component.java
│ │ ├── tx
│ │ │ └── transaction
│ │ │ ├── annotation
│ │ │ │ ├── AnnotationTransactionAttributeSource.java
│ │ │ │ ├── SpringTransactionAnnotationParser.java
│ │ │ │ ├── Transactional.java
│ │ │ │ └── TransactionAnnotationParser.java
│ │ │ ├── CannotCreateTransactionException.java
│ │ │ ├── interceptor
│ │ │ │ ├── AbstractFallbackTransactionAttributeSource.java
│ │ │ │ ├── BeanFactoryTransactionAttributeSourceAdvisor.java
│ │ │ │ ├── DefaultTransactionAttribute.java
│ │ │ │ ├── DelegatingTransactionAttribute.java
│ │ │ │ ├── RollbackRuleAttribute.java
│ │ │ │ ├── RuleBasedTransactionAttribute.java
│ │ │ │ ├── TransactionAspectSupport.java
│ │ │ │ ├── TransactionAttribute.java
│ │ │ │ ├── TransactionAttributeSource.java
│ │ │ │ ├── TransactionAttributeSourcePointcut.java
│ │ │ │ └── TransactionInterceptor.java
│ │ │ ├── NestedTransactionNotSupportedException.java
│ │ │ ├── PlatformTransactionManager.java
│ │ │ ├── SavepointManager.java
│ │ │ ├── support
│ │ │ │ ├── AbstractPlatformTransactionManager.java
│ │ │ │ ├── AbstractTransactionStatus.java
│ │ │ │ ├── DefaultTransactionDefinition.java
│ │ │ │ ├── DefaultTransactionStatus.java
│ │ │ │ ├── DelegatingTransactionDefinition.java
│ │ │ │ ├── TransactionSynchronizationManager.java
│ │ │ │ └── TransactionSynchronizationUtils.java
│ │ │ ├── TransactionDefinition.java
│ │ │ ├── TransactionException.java
│ │ │ └── TransactionStatus.java
│ │ └── util
│ │ ├── ClassUtils.java
│ │ ├── NumberUtils.java
│ │ ├── ReflectionUtils.java
│ │ └── StringValueResolver.java
│ └── test
│ ├── java
│ │ └── cn
│ │ └── bugstack
│ │ └── springframework
│ │ └── test
│ │ ├── ApiTest.java
│ │ ├── JdbcTest.java
│ │ ├── service
│ │ │ ├── impl
│ │ │ │ └── JdbcServiceImpl.java
│ │ │ └── JdbcService.java
│ │ └── TransactionProxy.java
│ └── resources
│ └── spring.xml
└── target
└── test-classes
└── spring.xml
562 directories, 1395 files
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论