springMVC的流程
1.用户发送请求到前端控制器,DispatcherServlt,前端控制器接收到请求之后,调用处理器映射器handlermapping
2.处理器映射器根据请求的url找到具体的处理器,生成处理器对象以及拦截器,并一起返回给前端控制器
3.前端控制器通过处理器适配器调用处理器,执行处理器,处理器适配器将处理器的执行结果modelandview返回给前端控制器
4.前端控制器将modelandview传给视图解析器进行解析,视图解析器对视图进行解析返回具体 的视图
5.前端控制器对视图进行渲染,将数据填充到视图上,完毕之后前端控制器响应用户
springmvc有哪些控制器
有前端控制器,映射处理器,处理器,处理器适配器,视图解析器 ,视图等
前端控制器:接收用户请求,响应请求,是一个核心的分发器
处理器映射器:前端控制器接受了请求之后将会调用处理器映射器,处理器映射器会根据请求的url找到具体的处理器,生成处理器对象以及拦截器,并一起返回给前端控制器
处理器:处理器就是后端控制器,就是我们自己编写的后端control
处理器适配器:处理器适配器会调用处理器,处理器执行完毕之后,处理器适配器将生成的modelandview对象反返回给前端控制器
视图解析器:视图解析器hi将modelandview进行解析
什么是springioc和springaaop
IOC和AOP是 spring的两大核心,ioc是控制反转,另一种说法就是依赖注入,在一个项目中,我们会使用很多类来描述他们特有的功能,并且类和类之间要通过相互协作完成某些业务上的逻辑,每一个都要负责管理与自己有交互的类的引用和依赖,这个时候如果是程序主动创建对象并管理依赖关系,代码将会变的难以维护和高度的耦合。而ioc的出现就解决了这个问题,我们通过ioc控制反转,将对象的控制权交给spring容器,并由容器管理和控制他们之间的依赖关系,这个时候只需要关注自身的业务逻辑就可以,简单的说将获取对象的方式进行了反转,spring根据配置文件在运行时候动态的创建和调用对象,用户需要对象的时候直接从spring容器中获取就可以了
spring中beanfactory是ioc的具体体现,和核心接口,提供了先进的配置机制,方便了对象的配置,用来包装和管理各种bean
ioc的注入方式:
set方法注入
控制层代码声明了一个orderService和setOrderservice()方法,xml配置文件中也有一个实例化对象,在程序程序运行的时候会将已经实例化的对象调用setorderservice()方法注入
构造器方式注入
控制层代码同set方法,xml配置文件中的代码有一个构造器参数
基于注解的方式
比较便捷,配置较少
⑴ 需要注意的是在持久层DAO层注解Repository中规定了名称,在Service层中声明名称必须一致。
⑵ 在服务层Service层注解Service中规定了名称,在控制层中声明的名称必须一致。
springioc用于将那些与业务无关单却对多个对象产生影响的公共行为和逻辑,将其抽取并封装成为一个可用的模块。这个模块被称为切面,江绍系统中重复代码,降低模块之间的耦合度,同时提高了系统的可维护性,可以用于权限认证,日志,事务处理等等。总之能够简化我们的开发。
举个例子,在系统操作数据库的时候,要考虑到事务相关的内容,如果在每一个方法中都新建一个事务管理器,那么代码将会严重的耦合,我们将事务相关的代码抽成一个独立的模块。通过AOP,确认每一个操作数据库的方法为一个连接点,这些连接点组成了一个切面。当长须运行到其中的某一个点的时候,我们将事务管理模块织入对象中,通过通知功能,完成整个事务管控工作,这样所有的操作数据库的方法中都不需要单独关心事务处理的内容,只要关注自身业务逻辑的实现就行。
Spring 切面可以应用5种类型的通知:
前置通知(Before):在目标方法被调用之前调用通知功能。
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
返回通知(After-returning):在目标方法成功执行之后调用通知。
异常通知(After-throwing):在目标方法抛出异常后调用通知。
环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
连接点:是在应用执行过程中能够插入切面的一个点。
切点: 切点定义了切面在何处要织入的一个或者多个连接点。
切面:是通知和切点的结合。通知和切点共同定义了切面的全部内容。
引入:引入允许我们向现有类添加新方法或属性。
织入:是把切面应用到目标对象,并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周期中有多个点可以进行织入:
编译期: 在目标类编译时,切面被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
类加载期:切面在目标加载到JVM时被织入。这种方式需要特殊的类加载器(class loader)它可以在目标类被引入应用之前增强该目标类的字节码。
运行期: 切面在应用运行到某个时刻时被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面的。