├── .gitignore
├── LICENSE
├── README.md
├── README_en.md
├── assets
├── application-context-life-cycle.drawio
├── application-context-life-cycle.png
├── auto-proxy.drawio
├── auto-proxy.png
├── aware-interface.drawio
├── aware-interface.png
├── bean-definition-and-bean-definition-registry.png
├── chainProceed.png
├── init-and-destroy-method.drawio
├── init-and-destroy-method.png
├── instantiation-strategy.png
├── populate-proxy-bean-with-property-values.drawio
├── populate-proxy-bean-with-property-values.png
├── prototype-bean.drawio
├── prototype-bean.png
├── resource.png
├── spring-framework.png
└── xml-file-define-bean.png
├── changelog.md
├── pom.xml
└── src
├── main
└── java
│ └── org
│ └── springframework
│ ├── aop
│ ├── AdvisedSupport.java
│ ├── Advisor.java
│ ├── AfterAdvice.java
│ ├── AfterReturningAdvice.java
│ ├── BeforeAdvice.java
│ ├── ClassFilter.java
│ ├── MethodBeforeAdvice.java
│ ├── MethodMatcher.java
│ ├── Pointcut.java
│ ├── PointcutAdvisor.java
│ ├── TargetSource.java
│ ├── aspectj
│ │ ├── AspectJExpressionPointcut.java
│ │ └── AspectJExpressionPointcutAdvisor.java
│ └── framework
│ │ ├── AdvisorChainFactory.java
│ │ ├── AopProxy.java
│ │ ├── CglibAopProxy.java
│ │ ├── DefaultAdvisorChainFactory.java
│ │ ├── JdkDynamicAopProxy.java
│ │ ├── ProxyFactory.java
│ │ ├── ReflectiveMethodInvocation.java
│ │ ├── adapter
│ │ ├── AfterReturningAdviceInterceptor.java
│ │ └── MethodBeforeAdviceInterceptor.java
│ │ └── autoproxy
│ │ └── DefaultAdvisorAutoProxyCreator.java
│ ├── beans
│ ├── BeansException.java
│ ├── PropertyValue.java
│ ├── PropertyValues.java
│ └── factory
│ │ ├── Aware.java
│ │ ├── BeanFactory.java
│ │ ├── BeanFactoryAware.java
│ │ ├── ConfigurableListableBeanFactory.java
│ │ ├── DisposableBean.java
│ │ ├── FactoryBean.java
│ │ ├── HierarchicalBeanFactory.java
│ │ ├── InitializingBean.java
│ │ ├── ListableBeanFactory.java
│ │ ├── ObjectFactory.java
│ │ ├── PropertyPlaceholderConfigurer.java
│ │ ├── annotation
│ │ ├── Autowired.java
│ │ ├── AutowiredAnnotationBeanPostProcessor.java
│ │ ├── Qualifier.java
│ │ └── Value.java
│ │ ├── config
│ │ ├── AutowireCapableBeanFactory.java
│ │ ├── BeanDefinition.java
│ │ ├── BeanFactoryPostProcessor.java
│ │ ├── BeanPostProcessor.java
│ │ ├── BeanReference.java
│ │ ├── ConfigurableBeanFactory.java
│ │ ├── InstantiationAwareBeanPostProcessor.java
│ │ └── SingletonBeanRegistry.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
│ ├── context
│ ├── ApplicationContext.java
│ ├── ApplicationContextAware.java
│ ├── ApplicationEvent.java
│ ├── ApplicationEventPublisher.java
│ ├── ApplicationListener.java
│ ├── ConfigurableApplicationContext.java
│ ├── annotation
│ │ ├── ClassPathBeanDefinitionScanner.java
│ │ ├── ClassPathScanningCandidateComponentProvider.java
│ │ └── Scope.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
│ │ │ ├── Converter.java
│ │ │ ├── ConverterFactory.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
│ └── StringValueResolver.java
└── test
├── java
└── org
│ └── springframework
│ └── test
│ ├── aop
│ ├── AutoProxyTest.java
│ ├── DynamicProxyTest.java
│ ├── PointcutExpressionTest.java
│ └── ProxyFactoryTest.java
│ ├── bean
│ ├── A.java
│ ├── B.java
│ ├── Car.java
│ └── Person.java
│ ├── common
│ ├── ABeforeAdvice.java
│ ├── CarFactoryBean.java
│ ├── ConvertersFactoryBean.java
│ ├── CustomBeanFactoryPostProcessor.java
│ ├── CustomerBeanPostProcessor.java
│ ├── StringToBooleanConverter.java
│ ├── StringToIntegerConverter.java
│ ├── StringToLocalDateConverter.java
│ ├── WorldServiceAfterReturnAdvice.java
│ ├── WorldServiceBeforeAdvice.java
│ ├── WorldServiceInterceptor.java
│ └── event
│ │ ├── ContextClosedEventListener.java
│ │ ├── ContextRefreshedEventListener.java
│ │ ├── CustomEvent.java
│ │ └── CustomEventListener.java
│ ├── expanding
│ └── PropertyPlaceholderConfigurerTest.java
│ ├── ioc
│ ├── ApplicationContextTest.java
│ ├── AutowiredAnnotationTest.java
│ ├── AwareInterfaceTest.java
│ ├── BeanDefinitionAndBeanDefinitionRegistryTest.java
│ ├── BeanFactoryPostProcessorAndBeanPostProcessorTest.java
│ ├── CircularReferenceWithProxyBeanTest.java
│ ├── CircularReferenceWithoutProxyBeanTest.java
│ ├── EventAndEventListenerTest.java
│ ├── FactoryBeanTest.java
│ ├── HelloService.java
│ ├── InitAndDestoryMethodTest.java
│ ├── LazyInitTest.java
│ ├── PackageScanTest.java
│ ├── PopulateBeanWithPropertyValuesTest.java
│ ├── PrototypeBeanTest.java
│ ├── ResourceAndResourceLoaderTest.java
│ ├── TypeConversionFirstPartTest.java
│ ├── TypeConversionSecondPartTest.java
│ ├── ValueAnnotationTest.java
│ └── XmlFileDefineBeanTest.java
│ └── service
│ ├── HelloService.java
│ ├── WorldService.java
│ └── WorldServiceImpl.java
└── resources
├── auto-proxy.xml
├── autowired-annotation.xml
├── car.properties
├── circular-reference-with-proxy-bean.xml
├── circular-reference-without-proxy-bean.xml
├── event-and-event-listener.xml
├── factory-bean.xml
├── hello.txt
├── init-and-destroy-method.xml
├── lazy-test.xml
├── package-scan.xml
├── populate-proxy-bean-with-property-values.xml
├── property-placeholder-configurer.xml
├── prototype-bean.xml
├── spring.xml
├── type-conversion-second-part.xml
└── value-annotation.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | out/
2 | target/
3 | .idea/
4 | .idea_modules/
5 | *.iml
6 | *.ipr
7 | *.iws
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #
mini-spring
2 | [](https://github.com/DerekYRC/mini-spring)
3 | [](https://www.apache.org/licenses/LICENSE-2.0.html)
4 | [](https://img.shields.io/github/stars/DerekYRC/mini-spring)
5 | [](https://img.shields.io/github/forks/DerekYRC/mini-spring)
6 |
7 | **[English](./README_en.md) | 简体中文**
8 |
9 | **姊妹版:**[**mini-spring-cloud**](https://github.com/DerekYRC/mini-spring-cloud) **(简化版的spring cloud框架)**
10 |
11 | ## 关于
12 |
13 | **mini-spring**是简化版的spring框架,能帮助你快速熟悉spring源码和掌握spring的核心原理。抽取了spring的核心逻辑,**代码极度简化,保留spring的核心功能**,如IoC和AOP、资源加载器、事件监听器、类型转换、容器扩展点、bean生命周期和作用域、应用上下文等核心功能。
14 |
15 | 如果本项目能帮助到你,请给个**STAR,谢谢!!!**
16 |
17 | ## 功能
18 | #### 基础篇
19 | * [IoC](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基础篇IoC)
20 | * [实现一个简单的容器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#最简单的bean容器)
21 | * [BeanDefinition和BeanDefinitionRegistry](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#BeanDefinition和BeanDefinitionRegistry)
22 | * [Bean实例化策略InstantiationStrategy](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#Bean实例化策略InstantiationStrategy)
23 | * [为bean填充属性](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#为bean填充属性)
24 | * [为bean注入bean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#为bean注入bean)
25 | * [资源和资源加载器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#资源和资源加载器)
26 | * [在xml文件中定义bean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#在xml文件中定义bean)
27 | * [容器扩展机制BeanFactoryPostProcess和BeanPostProcessor](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#BeanFactoryPostProcess和BeanPostProcessor)
28 | * [应用上下文ApplicationContext](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#应用上下文ApplicationContext)
29 | * [bean的初始化和销毁方法](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bean的初始化和销毁方法)
30 | * [Aware接口](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#Aware接口)
31 | * [bean作用域,增加prototype的支持](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bean作用域增加prototype的支持)
32 | * [FactoryBean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#FactoryBean)
33 | * [容器事件和事件监听器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#容器事件和事件监听器)
34 | * [AOP](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基础篇AOP)
35 | * [切点表达式](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#切点表达式)
36 | * [基于JDK的动态代理](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基于JDK的动态代理)
37 | * [基于CGLIB的动态代理](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基于CGLIB的动态代理)
38 | * [AOP代理工厂ProxyFactory](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#AOP代理工厂)
39 | * [几种常用的Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#几种常用的AdviceBeforeAdviceAfterAdviceAfterReturningAdviceThrowsAdvice)
40 | * [PointcutAdvisor:Pointcut和Advice的组合](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#pointcutadvisorpointcut和advice的组合)
41 | * [动态代理融入bean生命周期](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#动态代理融入bean生命周期)
42 |
43 | #### 扩展篇
44 | * [PropertyPlaceholderConfigurer](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#propertyplaceholderconfigurer)
45 | * [包扫描](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#包扫描)
46 | * [@Value注解](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#value注解)
47 | * [基于注解@Autowired的依赖注入](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#autowired注解)
48 | * [类型转换(一)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#类型转换一)
49 | * [类型转换(二)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#类型转换二)
50 |
51 | #### 高级篇
52 | * [解决循环依赖问题(一):没有代理对象](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#解决循环依赖问题一没有代理对象)
53 | * [解决循环依赖问题(二):有代理对象](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#解决循环依赖问题二有代理对象)
54 |
55 | #### 其他
56 | * [没有为代理bean设置属性(discovered and fixed by kerwin89)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bug-fix没有为代理bean设置属性discovered-and-fixed-by-kerwin89)
57 | * [支持懒加载和多切面增强(by zqczgl)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#支持懒加载和多切面增强by-zqczgl)
58 |
59 | ## 使用方法
60 | 阅读[changelog.md](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
61 |
62 | [视频教程(完整版)](https://www.bilibili.com/video/BV1nb4y1A7YJ)
63 |
64 | ## 提问
65 | [**点此提问**](https://github.com/DerekYRC/mini-spring/issues/4)
66 |
67 | ## 贡献
68 | 欢迎Pull Request
69 |
70 | ## 关于我
71 | [**点此了解**](https://github.com/DerekYRC)
72 |
73 | 手机/微信:**15975984828** 邮箱:**15975984828@163.com**
74 |
75 | ## Star History
76 |
77 | [](https://star-history.com/#DerekYRC/mini-spring&Date)
78 |
79 | ## 版权说明
80 | 未取得本人书面许可,不得将该项目用于商业用途
81 |
82 | ## 参考
83 | - [《Spring源码深度解析》](https://book.douban.com/subject/25866350/)
84 | - [《Spring 源码解析》](http://svip.iocoder.cn/categories/Spring)
85 | - [《精通Spring 4.x》](https://book.douban.com/subject/26952826/)
86 | - [《tiny-spring》](https://github.com/code4craft/tiny-spring)
87 |
--------------------------------------------------------------------------------
/README_en.md:
--------------------------------------------------------------------------------
1 | #
mini-spring
2 | [](https://github.com/DerekYRC/mini-spring)
3 | [](https://www.apache.org/licenses/LICENSE-2.0.html)
4 | [](https://img.shields.io/github/stars/DerekYRC/mini-spring)
5 | [](https://img.shields.io/github/forks/DerekYRC/mini-spring)
6 |
7 | **English | [简体中文](./README.md)**
8 |
9 | [**mini-spring-cloud**](https://github.com/DerekYRC/mini-spring-cloud) **(simplified version of the Spring Cloud framework)**
10 |
11 | ## About
12 |
13 | The **mini-spring** is a simplified version of the Spring framework that will help you quickly get familiar with the Spring source code and grasp the core principles of Spring. The core logic of Spring is extracted, the code is extremely simplified, and the core functions of Spring, such as IoC and AOP, resource loaders, event listeners, type conversion, container extension points, bean life cycle and scope, and application context, are retained.
14 |
15 | If this project can help you, please **STAR the project, thank you!!!**
16 |
17 | ## Contents
18 | #### Basics
19 | * [IoC](#Ioc)
20 | * [Implement a simple container](#实现一个简单的容器)
21 | * [BeanDefinition and BeanDefinitionRegistry](#BeanDefinition和BeanDefinitionRegistry)
22 | * [Bean Instantiation Strategy](#Bean实例化策略InstantiationStrategy)
23 | * [Populate bean with property values](#为bean填充属性)
24 | * [Populate bean with bean](#为bean注入bean)
25 | * [Resource and ResourceLoader](#资源和资源加载器)
26 | * [Define the bean in the XML file](#在xml文件中定义bean)
27 | * [Container extension mechanism:BeanFactoryPostProcess and BeanPostProcessor](#容器扩展机制BeanFactoryPostProcess和BeanPostProcessor)
28 | * [ApplicationContext](#应用上下文ApplicationContext)
29 | * [Init method and destroy method of bean](#bean的初始化和销毁方法)
30 | * [Aware interface](#Aware接口)
31 | * [Bean scope, added prototype support](#bean作用域,增加prototype的支持)
32 | * [FactoryBean](#FactoryBean)
33 | * [Event and event listener](#容器事件和事件监听器)
34 | * [AOP](#AOP)
35 | * [Pointcut expression](#切点表达式)
36 | * [JDK-based dynamic proxy](#基于JDK的动态代理)
37 | * [CGLIB-based dynamic proxy](#基于CGLIB的动态代理)
38 | * [AOP ProxyFactory](#AOP代理工厂ProxyFactory)
39 | * [Common Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](#几种常用的Advice)
40 | * [PointcutAdvisor:A combination of Pointcut and Advice](#PointcutAdvisor:Pointcut和Advice的组合)
41 | * [Dynamic proxies are integrated into the bean lifecycle](#动态代理融入bean生命周期)
42 |
43 |
44 | #### Expanding
45 | * [PropertyPlaceholderConfigurer](#PropertyPlaceholderConfigurer)
46 | * [Package scan](#包扫描)
47 | * [Value annotation](#Value)
48 | * [Autowired annotation](#Autowired)
49 | * [Type conversion(first part)](#类型转换一)
50 | * [Type conversion(second part)](#类型转换二)
51 |
52 | #### Advanced
53 | * [Solve the problem of circular dependencies(first part): without proxy bean](#解决循环依赖问题一)
54 | * [Solve the problem of circular dependencies(second part): with proxy bean](#解决循环依赖问题二)
55 |
56 | #### Bug fix
57 | * [populate proxy bean with property values(discovered and fixed by kerwin89)](#没有为代理bean设置属性)
58 |
59 | ## Usage
60 | Each function point corresponds to a branch. Switch to the branch corresponding to the function point to see the new function. The incremental change point is described in the [changelog.md](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md) file.
61 |
62 | ## Contributing
63 | Any contributions you make are greatly appreciated.
64 |
65 | ## Contact
66 | Please feel free to ask me any questions related to mini-spring and other technologies. My email is **15521077528@163.com**.
67 |
68 | ## Reference
69 | - [《Spring源码深度解析》](https://book.douban.com/subject/25866350/)
70 | - [《精通Spring 4.x》](https://book.douban.com/subject/26952826/)
71 | - [tiny-spring](https://github.com/code4craft/tiny-spring)
72 |
--------------------------------------------------------------------------------
/assets/application-context-life-cycle.drawio:
--------------------------------------------------------------------------------
1 | 7ZnbcpswEIafRpfpmJMQl2CTtDPJTDqetkluOopRgBYjV8ixnaevJCQDPiRup3Zd11dGv1Yg7e4nwRo4/fH8iuFJdkMTUgC7l8yBMwC2bfegLX6ksqgVy0JaSVmeaK0RhvkL0WJPq9M8IVXHkFNa8HzSFUe0LMmIdzTMGJ11zZ5o0X3qBKdkTRiOcLGufskTntUqsv1Gf0/yNDNPtmBQ94yxMdYrqTKc0FlLcmLg9BmlvL4az/ukkN4zfqnHXW7pXU6MkZLvMuDl68tt+uFj+HmYk/wxCL2H5NMF0nPjC7Ngkoj16yZlPKMpLXERN2rE6LRMiLxrT7Qam2tKJ0K0hPiNcL7QwcRTToWU8XGhe8k853dy+DtPt+5bPYO5vrNqLEyj5GzRGiSb9+2+ZphqmXHrXtKOq+iUjcgrrjHZhllK+Ct2Op+l31oP0DG4InRMxHyEASMF5vlzN6+wTs90addEUFzoIP5CQPV9n3Ex1U8CNizE/KMnKjzQDjX8MaWm46JSwQqFgYUm86ZTXKX6V92lmuDSaHc31yCGIIAA+SB2QRSBCBpDMfu2bUuuJ2LklfRrkkvmwyzLORlOsArUTGwx3USqOKPfSZ8WlKnRDrIfHQjlmvKiaOmJR1Di6rWa7N5AkPEeYZzMX42m2eGQptvsb4b2WbNZWFBrWWujcHt7SoDgTPQbpL5JtHNURNt7IjoiuByQp7zMeU7LU+XT7fJp99b5XNochE/zYnMGdCt4bwIKjwpQZ4+AXuIRp2xxSyt+y+iIVJVARh61lyCM1eErroP/AuXl0WpQRusou+igKNtnlLf5xt0RZf+oUHb3iPIKwx5AAUADEPsgGiiYPRC6ALlSCXoAwRPleHkEa45dd51jxz4ox96Z422+8Xbk2HKPCmTvkCBLWuMzyHDDu/WBQbbWfHqkIP8+kHBHII+LR7gnHh8Fjwq4GASxejGOAYrU6dqXhakTJW+l6uTAv111spx/hbzDH6H+jsR6R0Wsvydi5UerePMNfRAjEFqC05phcVaG6tAU6CIQDBTVfgfmutYcBfIickDgnSreK0Urb0NR+cBFq319GKkteyDLGTIBXBCiE42ps1K9gBuqF3+oeCGazb+Kqq/156wT/wQ=
--------------------------------------------------------------------------------
/assets/application-context-life-cycle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/application-context-life-cycle.png
--------------------------------------------------------------------------------
/assets/auto-proxy.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/assets/auto-proxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/auto-proxy.png
--------------------------------------------------------------------------------
/assets/aware-interface.drawio:
--------------------------------------------------------------------------------
1 | 7Ztfk6I4EMA/TR69kv/wiMrsbtXOlnvW3e3ey1WUDOYWCQdx1Pn0l2AQEERnSpASnySdAKE7v3SnE4EyXm0/RTBcPhMX+UAeulugTIAsy6ZpsR8u2e0lkmTKe4kXYVfIMsEMvyEhHArpGrsoLjSkhPgUh0XhggQBWtCCDEYR2RSbvRC/+NYQeqgkmC2gX5b+hV263EtN2cjknxH2lumbJV188QqmjcWXxEvokk1OpDhAGUeE0P3VajtGPtdeqpf9fU8nag8di1BAL7nh7Z+3qfflu/3nDCM8t2ztb/ePgSn6RnfpByOXfb8okoguiUcC6DuZdBSRdeAi/tQhK2VtvhISMqHEhP8iSnfCmHBNCRMt6coXtWiL6Q9++2+aKP3M1Uy24slJYZcWAhrtcjfx4s98XXZbUkrvK2tJKC4m62iBalSTjjYYeYjWtBPjmest9wJhg0+IrBDrD2sQIR9S/FocV1AMT+/QLrMguxBGfIdBxXNfob8WbwKy7rP+j14I00De1Pp/a5JWDOLEWDZrIJnhNqtkV574TZ4ShzBIZT+evwJHB5YOTAM4KhiNwEhPG7Le59vmxPuOpOKj4ZcNLj4eNktM0SyEiaE2bIopDqSYRuQXGhOfRMndiinPFV3n34R9Pyd3NWS6qvjWdHRXEJRqD0UUbWuteZjhBN1iflNFcZPNFZIuZMvcPJG2u7r9rQfQZ0A9C7TSKaDlhoAeIRhM0AsOMMUkuFc81SKeklzm89CmFT7TuOYB6EnwzgKqdwpQpUFAn+CCkmg3JTGdRmSB4pghwz3tE7CdxPeya6sXKB/QFSjLwzLKqtkqyvID5VO6US9E2egUymqDKB8xrAG2NDYnwDHAaJLArAFbBabKJdYQmPqdcnzgNo2YK0JmRW6VY+3B8SndaBdyLKmdAllrE2ROq/MAWa9wyI2B7FMyCH69ehB6u+3Udp/jcJYule6d4yPGPga2Xga7Uqc3xVhvCOM5wzjh1AGWk8TTDjBHiVMe83TWnQJ7lKs6lG+WrJKUfhD7EUCNCz2vdivHq8fuHBuf4+/Ot/FU+ab//jbwBmWDXs9cOWNlpjtjLqlgrMx2bZirUkFSp+Iko6EJlqcm2PrGNoBjAlti0+p+ymURkZ2ERmymNYE1SSZhozD37jcURha/GCnA0u51Nj5KTWptpiYrh2b9XmBAgh7NvlJFAqNSad1KYEhNZTCSIGnC846cYRXY5p1iqRylGfWKIKmpLGPlAFP7SWWd8zwLpdypmKipLfkvPN8PffyGA48nJhgW8IWiaBqRkI13jOIZoneK6aCURqzgtLHsQ6WZ67OI1wZVAh+Ihofg+tFwHYDdTf/X9boB52nyEzK2neYc7MSdWjxEfk8kzDf4BuxTl8TtC9aafmusJamk1EYdcFdWuXXR7lkHbHWK65utci0eKjPHxNrZT8CUeru4NSowbndxe2azvl9xtHUhxulhpY5wbDXE8QTHIYnh3EcijHYRR2h3p3CWnKxRkXpq2cnWbwT0K3hOqetu7qm22+2Gz+ddrIC5Z4GzefPd+J7s7b13N/70LvsF62W1JcDrOtnkQVd7w5THOIkRzUm7y2wJ0ArzX3yARmlzrVtp4dsehGtt5XsVZC894XpTZJvaDrLD0McLyI+bj1l7tKU5csuVdwqwfsFRVvVKq1xWzP4qmtTl/nGrOP8D
--------------------------------------------------------------------------------
/assets/aware-interface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/aware-interface.png
--------------------------------------------------------------------------------
/assets/bean-definition-and-bean-definition-registry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/bean-definition-and-bean-definition-registry.png
--------------------------------------------------------------------------------
/assets/chainProceed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/chainProceed.png
--------------------------------------------------------------------------------
/assets/init-and-destroy-method.drawio:
--------------------------------------------------------------------------------
1 | 7Ztbs9o2EIB/jR7p4Lv8aINPkpkkQ8q0TfrSMVjHVmssaotw+fWVjIRtbC5JseEAT1gryUhafburFQBtMFu9S/159IkEKAZqP1gBbQhUVYXQZh9cst5KFAWqW0mY4kDICsEYb5AQ9oV0gQOUVRpSQmKK51XhlCQJmtKKzE9Tsqw2eyVx9VvnfohqgvHUj+vSP3BAo60UqlYhf49wGMlvVkwx45kvG4uZZJEfkGVJpHlAG6SE0O3TbDVAMV89uS7bfi8HancDS1FCz+mw+WszCj98cX4fY4QntmP8GfzWg2JsdC0njAI2f1EkKY1ISBI/9gqpm5JFEiD+1j4rFW0+EjJnQoUJ/0aUroUy/QUlTBTRWSxq0QrTr7z7L4YofSvVDFfizXlhLQsJTdelTrz4rVxXdMtLsl99lcTCZWSRTtGRpZG7zU9DRI+0E/uZr1vpC4QO3iEyQ2w8rEGKYp/i79V95YvtGe7aFRpkD0KJP6BQ8d7vfrwQ3wRUM2bjd18JW4Gyqs1/F0RW9LJcWQ5roMD5qqhkT6H4zN+Szf1Eyr5++gg8E9gmgBbwdOC6wDVlQzb6ctuSeDsQKd7bfsXm4vthGWGKxnM/V9SSmZjqRspoSv5BAxKTNO+tQXWimSafE47jkjwwEAx0MVe5uxsIkquHUopWR7W5s3CCbmnfJO3LwlgoppBFJUOh91vaAPaT6BOkniRauymi1ZaIdpGfDNErTjDFJLlXPvUqn2q/zueuTSd8ysDmCehB8E4Cat4UoFqLgL74U0rS9YhkdJSSKcoyhgx3tS/A8XLny57th0B551olyrCOsg47RVl9onxobfQzUbZuCmW9RZT3GDYAOxvDIfAs4A5zmA3g6ADqXGL3ATTvlOOdCxYc63qdY03tlGPjyfGhtTHO5FjRbwpko0uQOa3eE2SzIbbuGGSltqY3CvLPA2meCeRt8Wi2xOOE8ZgD5wHbywNjD0A3964Dnpi6U/L2sk6aee2sk6K9FfK6d6HWmcQa1yLWzIIJtt5nX7zPg5H22fx10wt7dYVeTl0lZRWqO6EupaKsQndH1bW3lhfTX+OKXdXAWi0ZWJ5jYAcVxwIeBI7CzOrW5LLQxsljHGZpIbCHuRG2KrZ3ezXg2vzB1YBt3Ks13ssxGg13AK3lGBt34vFbvYQkb9T6XgRnpSE10biK1jV5VtpKReRB0pAnEDnDOnDgnWKp7eULzYZ8YVvpwsb9pD+pPOE8z4BSvWZM1Nbl+geeuPdjvMFJyDMMDAv/laJ0lJI52+8YZWNEbxfTGpMNW+Agpr1aPrCB09bSCI1qPp4OvDSoCviJaLgPOoiGDwN4bmL/WqCqrTlPyH/r4jgy5+Dk7tTmIfKPRML8pq7HphqR4FGwNhpyFN1ifSI7eHEHfLOn3MPR7hkO2L4m11c75do8VGaOibVzXgBU3tLh9n9xvH+4tRow7vZwe+LW/cHjaPtMjJV+s9q74dhuieMhzuYk8ycxEmF0gDhC6zuFs+ZkrYbUU8dO9vhFwIMHz/LHfzeTezo6ym7D59MuVsD8YIEzbPFanRWLP6DkdaX/8Wjefw==
--------------------------------------------------------------------------------
/assets/init-and-destroy-method.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/init-and-destroy-method.png
--------------------------------------------------------------------------------
/assets/instantiation-strategy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/instantiation-strategy.png
--------------------------------------------------------------------------------
/assets/populate-proxy-bean-with-property-values.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/assets/populate-proxy-bean-with-property-values.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/populate-proxy-bean-with-property-values.png
--------------------------------------------------------------------------------
/assets/prototype-bean.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/assets/prototype-bean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/prototype-bean.png
--------------------------------------------------------------------------------
/assets/resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/resource.png
--------------------------------------------------------------------------------
/assets/spring-framework.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/spring-framework.png
--------------------------------------------------------------------------------
/assets/xml-file-define-bean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DerekYRC/mini-spring/0a14861c7be1a942a6cfe037ba012a59dfca2755/assets/xml-file-define-bean.png
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 | 4.0.0
6 |
7 | org.springframework
8 | mini-spring
9 | 1.0-SNAPSHOT
10 | mini-spring
11 |
12 | https://github.com/DerekYRC/mini-spring
13 |
14 |
15 | UTF-8
16 | 1.8
17 | 1.8
18 |
19 |
20 |
21 |
22 | cglib
23 | cglib-nodep
24 | 3.3.0
25 |
26 |
27 |
28 | aopalliance
29 | aopalliance
30 | 1.0
31 |
32 |
33 |
34 | org.aspectj
35 | aspectjweaver
36 | 1.8.0
37 |
38 |
39 |
40 | org.dom4j
41 | dom4j
42 | 2.1.3
43 |
44 |
45 |
46 | cn.hutool
47 | hutool-all
48 | 5.5.0
49 |
50 |
51 |
52 | junit
53 | junit
54 | 4.11
55 | test
56 |
57 |
58 |
59 | org.assertj
60 | assertj-core
61 | 3.11.1
62 | test
63 |
64 |
65 |
66 | cglib
67 | cglib
68 | 3.3.0
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/src/main/java/org/springframework/aop/AdvisedSupport.java:
--------------------------------------------------------------------------------
1 | package org.springframework.aop;
2 |
3 | import org.aopalliance.intercept.MethodInterceptor;
4 | import org.springframework.aop.framework.AdvisorChainFactory;
5 | import org.springframework.aop.framework.DefaultAdvisorChainFactory;
6 |
7 | import java.lang.reflect.Method;
8 | import java.util.ArrayList;
9 | import java.util.List;
10 | import java.util.Map;
11 | import java.util.concurrent.ConcurrentHashMap;
12 |
13 | /**
14 | * @author zqc
15 | * @date 2022/12/16
16 | */
17 | public class AdvisedSupport {
18 |
19 | //是否使用cglib代理
20 | private boolean proxyTargetClass = true;
21 |
22 | private TargetSource targetSource;
23 |
24 |
25 | private MethodMatcher methodMatcher;
26 |
27 | private transient Map> methodCache;
28 |
29 | AdvisorChainFactory advisorChainFactory = new DefaultAdvisorChainFactory();
30 |
31 | private List advisors = new ArrayList<>();
32 |
33 | public AdvisedSupport() {
34 | this.methodCache = new ConcurrentHashMap<>(32);
35 | }
36 | public boolean isProxyTargetClass() {
37 | return proxyTargetClass;
38 | }
39 |
40 | public void setProxyTargetClass(boolean proxyTargetClass) {
41 | this.proxyTargetClass = proxyTargetClass;
42 | }
43 |
44 | public void addAdvisor(Advisor advisor) {
45 | advisors.add(advisor);
46 | }
47 |
48 | public List getAdvisors() {
49 | return advisors;
50 | }
51 |
52 | public TargetSource getTargetSource() {
53 | return targetSource;
54 | }
55 |
56 | public void setTargetSource(TargetSource targetSource) {
57 | this.targetSource = targetSource;
58 | }
59 |
60 |
61 | public MethodMatcher getMethodMatcher() {
62 | return methodMatcher;
63 | }
64 |
65 | public void setMethodMatcher(MethodMatcher methodMatcher) {
66 | this.methodMatcher = methodMatcher;
67 | }
68 | /**
69 | * 用来返回方法的拦截器链
70 | */
71 | public List