已完成
- Spring IOC
- Spring DI
- Spring MVC
继续完善:
Spring AOP 的功能,基于 Spring IOC 和 DI 去完成
未完成: Spring AOP、Spring Transaction、Spring JDBC、自己手写 ORM 框架。
Spring IOC 入口,DispatcherServlet,通过 DispatcherServlet 启动一个 ApplicationContext 容器,由 ApplicationContext 启动一个 IOC 的操作,通过 DarianBeanDefinitionReader 读进来,变成一个 DarianBeanDefinition,有一个 DI 过程,有一个依赖注入,完成之后,会把所有的对象封装成 BeanWrapper,再把 BeanWrapper 保存在容器中。DI 是从一个 getBean 开始的。 IOC 是从 refresh() 开始的。
所有的对象在 IOC 中都有一个代理的过程,在 Spring 中真实的对象,我们基本上是拿不到的。我们会有一个 AOP 的过程,我们代理的过程主要是由一个掌控力,代理之后,对象都是由 Spring 去掌控了,而不是最原始的对象了。我们 Spring 只是为了帮你保存下来最原始的对象,不会做任何更改,我们 Spring 操作的都是被代理过的对象。
BeanWrapper中,我们保存了最原始的对象和代理后的对象。
Spring 会根据你一个目标接口,也就是目标的一个类,有没有实现接口。Java 中不能支持多实现的。如果你实现了接口,他就会选择 JDK, 如果没有实现,他就会选择 Cglib。它是有策略的。
xml
<aop:pointcut expression="execution(* com.gupaoedu.vip.aop.service..*(..))" id="simplePointcut"/>
<aop:pointcut expression="execution(* com.gupaoedu.vip.aop.service..*(..))" id="simplePointcut"/>
1
使用的时候要调代理对象,但是判断的时候要调原生对象。