Skip to content

Commit

Permalink
update readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
DerekYRC committed Jan 30, 2021
1 parent b29bc9b commit a2dd472
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 27 deletions.
36 changes: 18 additions & 18 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

## 功能
#### 基础篇
* [IoC](#Ioc)
* [IoC](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基础篇IoC)
* [实现一个简单的容器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#最简单的bean容器)
* [BeanDefinition和BeanDefinitionRegistry](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#BeanDefinition和BeanDefinitionRegistry)
* [Bean实例化策略InstantiationStrategy](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#Bean实例化策略InstantiationStrategy)
Expand All @@ -29,30 +29,30 @@
* [bean作用域,增加prototype的支持](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bean作用域增加prototype的支持)
* [FactoryBean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#FactoryBean)
* [容器事件和事件监听器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#容器事件和事件监听器)
* [AOP](#AOP)
* [切点表达式](#切点表达式)
* [基于JDK的动态代理](#基于JDK的动态代理)
* [基于CGLIB的动态代理](#基于CGLIB的动态代理)
* [AOP代理工厂ProxyFactory](#AOP代理工厂ProxyFactory)
* [几种常用的Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](#几种常用的Advice)
* [PointcutAdvisor:Pointcut和Advice的组合](#PointcutAdvisor:Pointcut和Advice的组合)
* [动态代理融入bean生命周期](#动态代理融入bean生命周期)
* [AOP](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基础篇AOP)
* [切点表达式](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#切点表达式)
* [基于JDK的动态代理](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基于JDK的动态代理)
* [基于CGLIB的动态代理](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基于CGLIB的动态代理)
* [AOP代理工厂ProxyFactory](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#AOP代理工厂)
* [几种常用的Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#几种常用的AdviceBeforeAdviceAfterAdviceAfterReturningAdviceThrowsAdvice)
* [PointcutAdvisor:Pointcut和Advice的组合](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#PointcutAdvisorPointcut和Advice的组合)
* [动态代理融入bean生命周期](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#动态代理融入bean生命周期)


#### 扩展篇
* [PropertyPlaceholderConfigurer](#PropertyPlaceholderConfigurer)
* [包扫描](#包扫描)
* [@Value注解](#@Value注解)
* [基于注解@Autowired的依赖注入](#基于注解@Autowired的依赖注入)
* [类型转换(一)](#类型转换一)
* [类型转换(二)](#类型转换二)
* [PropertyPlaceholderConfigurer](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
* [包扫描](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
* [@Value注解](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
* [基于注解@Autowired的依赖注入](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
* [类型转换(一)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
* [类型转换(二)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)

#### 高级篇
* [解决循环依赖问题(一):没有代理对象](#解决循环依赖问题(一):没有代理对象)
* [解决循环依赖问题(二):有代理对象](#解决循环依赖问题(二):有代理对象)
* [解决循环依赖问题(一):没有代理对象](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)
* [解决循环依赖问题(二):有代理对象](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)

#### bug fix
* [没有为代理bean设置属性(discovered and fixed by kerwin89)](#没有为代理bean设置属性)
* [没有为代理bean设置属性(discovered and fixed by kerwin89)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)

## 使用方法
每个功能点对应一个分支,切换到功能点对应的分支了解新增的功能,增量改动点在[changelog.md](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)文件中描述。
Expand Down
18 changes: 9 additions & 9 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [基础篇:IoC](#基础篇:IoC)
# [基础篇:IoC](#基础篇IoC)
## [最简单的bean容器](#最简单的bean容器)
> 分支:simple-bean-container
Expand Down Expand Up @@ -661,9 +661,9 @@ org.springframework.test.common.event.CustomEventListener
org.springframework.test.common.event.ContextClosedEventListener
```

# 基础篇:AOP
# [基础篇:AOP](#基础篇AOP)

## 切点表达式
## [切点表达式](#切点表达式)
> 分支:pointcut-expression
Joinpoint,织入点,指需要执行代理操作的某个类的某个方法(仅支持方法级别的JoinPoint);Pointcut是JoinPoint的表述方式,能捕获JoinPoint。
Expand Down Expand Up @@ -694,7 +694,7 @@ public class PointcutExpressionTest {
}
```

## 基于JDK的动态代理
## [基于JDK的动态代理](#基于JDK的动态代理)
> 分支:jdk-dynamic-proxy
AopProxy是获取代理对象的抽象接口,JdkDynamicAopProxy的基于JDK动态代理的具体实现。TargetSource,被代理对象的封装。MethodInterceptor,方法拦截器,是AOP Alliance的"公民",顾名思义,可以拦截方法,可在被代理执行的方法前后增加代理行为。
Expand All @@ -721,7 +721,7 @@ public class DynamicProxyTest {
}
```

## 基于CGLIB的动态代理
## [基于CGLIB的动态代理](#基于CGLIB的动态代理)
> 分支:cglib-dynamic-proxy
基于CGLIB的动态代理实现逻辑也比较简单,查看CglibAopProxy。与基于JDK的动态代理在运行期间为接口生成对象的代理对象不同,基于CGLIB的动态代理能在运行期间动态构建字节码的class文件,为类生成子类,因此被代理类不需要继承自任何接口。
Expand Down Expand Up @@ -753,7 +753,7 @@ public class DynamicProxyTest {
}
```

## AOP代理工厂
## [AOP代理工厂](#AOP代理工厂)
> 分支:proxy-factory
增加AOP代理工厂ProxyFactory,由AdvisedSupport#proxyTargetClass属性决定使用JDK动态代理还是CGLIB动态代理。
Expand Down Expand Up @@ -792,7 +792,7 @@ public class DynamicProxyTest {
}
```

## 几种常用的Advice:BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice...
## [几种常用的Advice:BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice...](#几种常用的AdviceBeforeAdviceAfterAdviceAfterReturningAdviceThrowsAdvice)
> 分支: common-advice
Spring将AOP联盟中的Advice细化出各种类型的Advice,常用的有BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice,我们可以通过扩展MethodInterceptor来实现。
Expand Down Expand Up @@ -842,7 +842,7 @@ public class DynamicProxyTest {
}
```

## PointcutAdvisor:Pointcut和Advice的组合
## PointcutAdvisor:Pointcut和Advice的组合(#PointcutAdvisorPointcut和Advice的组合)
> 分支:pointcut-advisor
Advisor是包含一个Pointcut和一个Advice的组合,Pointcut用于捕获JoinPoint,Advice决定在JoinPoint执行某种操作。实现了一个支持aspectj表达式的AspectJExpressionPointcutAdvisor。
Expand Down Expand Up @@ -878,7 +878,7 @@ public class DynamicProxyTest {
}
```

## 动态代理融入bean生命周期
## [动态代理融入bean生命周期](#动态代理融入bean生命周期)
> 分支:auto-proxy
结合前面讲解的bean的生命周期,BeanPostProcessor处理阶段可以修改和替换bean,正好可以在此阶段返回代理对象替换原对象。不过我们引入一种特殊的BeanPostProcessor——InstantiationAwareBeanPostProcessor,如果InstantiationAwareBeanPostProcessor处理阶段返回代理对象,会导致短路,不会继续走原来的创建bean的流程,具体实现查看AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation。
Expand Down

0 comments on commit a2dd472

Please sign in to comment.