spring和spring mvc总结
什么是spring?
- 方便解耦,简化开发,通过IOC容器将对象之间的依赖关系交由spring进行控制
- 提供AOP切面编程支持,方便面向切面编程如性能检测,事务管理,日志记录等
- 声明事物的支持
- 方便集成各种优秀框架
- 简化常用工具类,可远程调用封装
什么是spring mvc?
- sping mvc是基于mvc的web框架.spring mvc是spring框架的一个模块,spring
mvc和spring无需通过中间整合层整合. - spring的mvc框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。
- MVC:全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,使用的MVC的目的:在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式
spring mvc请求流程:
- 发起请求到前端控制器(DispatcherServlet)
- 前端控制器请求HandlerMapping查找Handler可以根据配置(可以根据xml配置或注解进行查找)
- 处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器
- 前端控制器调用处理器适配器去执行Handler
- 处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
- Handler执行完成给适配器返回ModelAndView
- 处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
- 前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
- 视图解析器向前端控制器返回View
- 前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
- 前端控制器向用户响应结果
什么是spring的AOP?
- AOP一般称为面向切面,用于将那些对业务无关,却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,减少重复代码,减少模块之间的耦合度,提高可维护性.可用于权限认证,日志管理,事务处理等.
- AOP实现的关键在于代理模式,AOP代理主要分为静态代理和动态代理,动态代理分为JDK动态代理和CGLIB动态代理
spring AOP中的相关概念:
- Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
- Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
- Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
- Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
- Target(目标对象):织入 Advice 的目标对象.。
- Weaving(织入):将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程
spring AOP中Advice的类型:
- before advice:在 join point 前被执行的 advice. 虽然 before advice 是在 join point 前被执行, 但是它并不能够阻止 join point 的执行, 除非发生了异常(即我们在 before advice 代码中, 不能人为地决定是否继续执行 join point 中的代码)
- after return advice: 在一个 join point 正常返回后执行的 advice
- after throwing advice:当一个 join point 抛出异常后执行的 advice
- after(final) advice:无论一个 join point 是正常退出还是发生了异常, 都会被执行的 advice
- around advice:在 join point 前和 joint point 退出后都执行的 advice. 这个是最常用的 advice.
spring bean的生命周期:
- 实例化bean
- 设置对象属性(依赖注入)
- 处理Aware接口(通过一些接口传递bean的id和spring上下文)
- BeanPostProcessor(可实现改接口对bean进行一些自定义处理)
- InitializingBean与init-method(如配置该方法则自动调用其配置的初始化方法)
- 如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;
------以上几步之后已经被正确创建了就可以用了------- - DisposableBean(如果实现改接口,不在需要bean时会自动调用destroy()方法)
- destroy-method(如配置该属性,会自动调用销毁方法)
spring支持的集中bean的作用域:
- singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护
- prototype:为每一个bean请求提供一个实例
- request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收
- session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效
- global-session:全局作用域,全局作用域与Servlet中的session作用域效果相同
spring基于xml注入bean的集中方式:
- Set方法注入
- 构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
- 静态工厂注入
- 实例工厂