spring-终于来了

所有的类都要在spring容器中登记,说明这个类是什么东西,还需要什么东西,然后在系统运行的时候把要的东西主动给我,同时也罢你交给其他需要你的东西,所有类的创建、销毁都是由spring来控制的。

以前是程序代码控制对象之间的关系,现在控制权由应用代码转移到了外部容器里,控制权发生反转。对于spring来说就是控制对象的生命周期和对象之间的关系。

IOC:inversion of control

把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言提供的反射机制,根据配置文件中给出的类名生成相应的对象

反射reflection:根据给出的类名来动态的生成对象,这种编程方式可以让对象在生成时才被决定到底是哪一种对象。

aop:aspect oriented programming 面向方面编程

横切技术,解剖封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,这样能减少系统的重复代码。

核心关注点,横切关注点

实现方式:动态和静态

动态:截取消息重新封装

静态:使用特定的语法

spring实现jdk代理和cglib代理,jdk是在运行期间创建一个接口的实现类来完成目标对象的代理

cglib是在运行期间生成的代理对象是目标类扩展的子类。

jdk的代理实现:java.lang.reflect里的proxy 和invocationhandler

jdk的核心是实现InvocationHandler接口,使用invoke()方法进行面向切面的处理,调用相应的通知。cglib的核心是实现MethodInterceptor接口,使用intercept()方法进行面向切面的处理,调用相应的通知。

spring会自动在JDK动态代理和CGLIB之间转换(没有实现接口的就用CGLIB代理,使用了接口的类就用JDK动态代理)

JDK动态代理:

    代理类与委托类实现同一接口,主要是通过代理类实现InvocationHandler并重写invoke方法来进行动态代理的,在invoke方法中将对方法进行增强处理  优点:不需要硬编码接口,代码复用率高,缺点:只能够代理实现了接口的委托类 

CGLIB动态代理:

    代理类将委托类作为自己的父类并为其中的非final委托方法创建两个方法,一个是与委托方法签名相同的方法,它在方法中会通过super调用委托方法;另一个是代理类独有的方法。在代理方法中,它会判断是否存在实现了MethodInterceptor接口的对象,若存在则将调用intercept方法对委托方法进行代理  优点:可以在运行时对类或者是接口进行增强操作,且委托类无需实现接口,缺点:不能对final类以及final方法进行代理

Spring称这些创建和管理的Java对象为Bean

BeanFactory是Spring框架最核心的接口,它提供了高级IOC的配置机制。ApplicationContext建立在BeanFactory基础之上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用。一般称BeanFactory为IOC容器,而称ApplicationContext为应用上下文。

(1)用户发起请求到前端控制器(Controller)

(2)前端控制器没有处理业务逻辑的能力,需要找到具体的模型对象处理(Handler),到处理器映射器(HandlerMapping)中查找Handler对象(Model)。

(3)HandlerMapping返回执行链,包含了2部分内容: ① Handler对象、② 拦截器数组

(4)前端处理器通过处理器适配器包装后执行Handler对象。

(5)处理业务逻辑。

(6)Handler处理完业务逻辑,返回ModelAndView对象,其中view是视图名称,不是真正的视图对象。

(7)将ModelAndView返回给前端控制器。

(8)视图解析器(ViewResolver)返回真正的视图对象(View)。

(9)(此时前端控制器中既有视图又有Model对象数据)前端控制器根据模型数据和视图对象,进行视图渲染。

(10)返回渲染后的视图(html/json/xml)返回。

(11)给用户产生响应。

组件:

(1)前端控制器DispatcherServlet(不需要工程师开发),由框架提供

作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

(2)处理器映射器HandlerMapping(不需要工程师开发),由框架提供

作用:根据请求的url查找Handler。HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

(3)处理器适配器HandlerAdapter

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

(4)处理器Handler(需要工程师开发)

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。

(5)视图解析器View resolver(不需要工程师开发),由框架提供

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)。View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。

(6)视图View(需要工程师开发jsp...)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值