Spring 代码粘贴后感

来源:互联网 发布:java 签名是什么 编辑:程序博客网 时间:2024/04/29 14:34

1.通过各种方式加载xml

2.将xml的bean信息转化为BeanDefinition对象,并将信息存放在某个地方

3.处理BeanDefinition对象 

首先生成Bean实例

然后处理所有的依赖,其中依赖别的对象(ref)就直接加载了beanFactory.registerDependentBean

最后依赖的属性都注入到对象里面去




aop

如何获取一个代理的Bean的

1.获取一下通知器信息放成员变量里

2.通过工厂生成AopProxy然后getProxy()

3.动态代理通过InvocationHandler接口实现咯.


aop的实现, 方法调用时

4.在动态代理的实现invoke()中 获取拦截器链

4.1.拦截器链对于每个方法只在最初获取一次,然后缓存

4.2.从配置文件中获取通知器遍历,符合切点规则就通过注册器来获取拦截器

4.3.在注册器里面,通过适配器,包装好对应的通知为拦截器,在拦截器的invoke()里面最终实现方法的调用

5.在拦截器链上搞事,搞出一个ReflectiveMethodInvocation对象,并调用此方法的proceed()

6.逐个处理拦截器,当前方法符合切点规则时,执行拦截器上的invoke()也就是4.2中的增强方法了


MVC

首先是监听器ContextLoaderListener,当服务启动的时候就会做一些事情.创建根上下文,然后refresh()

然后是DispatcherServlet这个Servlet

1.在Servlet的init()方法里面,初始化了MVC上下文,处理了很多很多默认的Bean,并设置根上下文然后refresh()

2.然后就初始化一些MVC特有的东西,基本上是一些Resolver,大部分是初始化到成员变量上去了,关注HandlerMapping

3.然后从前端过来一个Http请求,这个Servlet拦截了,在doService()里搞事

4.首先去获取这个请求对应的HandlerExecution,包装了Handler的对象

4.1遍历handlerMappings属性,调用每一个HandlerMapping对象的getHandler()

4.2这个方法的实现在AbstractHandlerMapping,

首先getHandlerInternal(),然后用获取的handler,getHandlerExecutionChain()

4.3getHandlerInternal()实现在AbstractHandlerMethodMapping

使用lookupHandlerMethod(),找到匹配度最大的HandlerMethod

4.4getHandlerExecutionChain(),使用找到的HandlerMethod构建HandlerExecution

5.然后测试这个返回的Handler是否符合规格

6.执行这个Handler,返回一个ModelAndView

7.根据ModalAndView获取对应View

8.使用View调用render(),继而调用子类实现的renderMergedOutputModel()去渲染





原创粉丝点击