一、Spring简介
Spring是一个分层的 full-stack(一站式)轻量级框架,以Ioc(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切片编程)为内核,使用简单的JavaBean来完成以前只能由EJB(Enterprise Java Beans)完成的工作,取代了臃肿、低效的EJB。
Spring致力于JavaEE应用各层的解决方案,是企业应用一站式开发很好的选择,在表现层它提供了Spring MVC以及整合Struts的功能,在业务逻辑层可以管理事务、记录日志等,在持久层可以整合Hibernate、Mybatis等框架。虽然Spring贯穿表现层、业务逻辑层、持久层,但Spring并不是要取代那些已有的优秀框架,而是可以高度开放的与其它优秀框架无缝整合。
①Spring的优势:
- 方便解耦,简化开发
- IOC 控制反转
- AOP 编程的支持
- 声明式事务的支持
- 方便程序的测试
②Spring程序开发步骤 :
- 导入 Spring 开发的基本包坐标
- 编写 Dao 接口和实现类
- 创建 Spring 核心配置文件
- 在 Spring 配置文件中配置 UserDaoImpl
- 使用 Spring 的 API 获得 Bean 实例
③Spring中Bean标签基本配置
用于配置对象交由Spring 来创建。
默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。
-
基本属性:
- id:Bean实例在Spring容器中的唯一标识
- class:Bean的全限定名称
④Bean标签范围配置:
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的 |
prototype | 多例的 |
request | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 |
session | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 |
global session | WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于 session |
1)当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2)当scope的取值为prototype时
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
⑤Bean实例化三种方式
1) 使用无参构造方法实例化
它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败
<bean id="userDao" class="com.test.factory.StaticFactoryBean" factory-method="createUserDao" />
2) 工厂静态方法实例化
- 工厂的静态方法返回Bean实例
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
3) 工厂实例方法实例化
工厂的非静态方法返回Bean实例
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="factoryBean" class="com.test.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
⑥Bean的依赖注入概念:
依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。
IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。
简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取
- Bean的依赖注入方式
- 构造方法
- set方法
⑦ Spring相关API
ApplicationContext的继承体系
applicationContext:接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象。
1)ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件 推荐使用这种
2)FileSystemXmlApplicationContext
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
3)AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
二、SpringMVC
①SpringMVC的开发步骤
-
导入SpringMVC相关坐标
-
配置SpringMVC核心文件 spring-mvc.xml
-
配置SpringMVC核心控制器DispathcerServlet
-
创建Controller类和视图页面
-
使用注解配置Controller类中业务方法的映射地址
-
客户端发起请求测试
②SpringMVC执行流程
- 用户发送请求至前端控制器DispatcherServlet。
- DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则 生成)一并返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter处理器适配器。
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
- Controller执行完成返回ModelAndView。
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
- ViewReslover解析后返回具体View。
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中),DispatcherServlet响应用户。
③springmvc 的重要组件
- 前端控制器:DispatcherServlet
用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。 - 处理器映射器:HandlerMapping,HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的
映射方式,例如:配置文件方式,实现接口方式,注解方式等。 - 处理器适配器:HandlerAdapter
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。 - 处理器:Handler
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理。 - 视图解析器:View Resolver
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体 的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。 - 视图:View
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的 视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据 业务需求开发具体的页面
④SpringMVC相关注解:
@RequestMapping
- 作用:用于建立请求 URL 和处理请求方法之间的对应关系
- 属性:
- value:用于指定请求的URL。它和path属性的作用是一样的
- method:用于指定请求的方式
- params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一 样
@RequestMapping(value="/test", method=RequestMethod.POST)等价于下列方法(SpringMVC中支持的RESTFul风格)
·@PostMapping("/test") 新增
·@GetMapping 查询
·@DeleteMapping 删除
·@PutMapping 修改
三、Mybatis
- 1.Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发是不需要过多的繁杂操作,程序员直接编写原生SQL语句,控制sql执行性能.
- 2.简化增删该查,取代 jdbcTemplate,将来 dao 层只需要编写接口和 sql 就可以了(dao的实现,jdbcTemplate 不需要).
- 3.可以使用XML或注解的方式来配置和映射原生信息,将实体类映射成为数据库中的数据,避免手动设置参数的繁琐操作.
MyBatis框架使用场景:
- MyBatis专注于SQL本身,是一个灵活的持久层(Dao)解决方案。
- 性能要就较高,相对于需求变化较多的项目,比如互联网项目,以及别的大型项目,MyBatis是一个很不错的选择.
MyBatis开发步骤:
- 添加MyBatis的坐标
- 配置连接信息
- 创建-实体-数据表
- 编写-实体-类
- 编写映射文件Mapper.xml
- 编写核心文件SqlMapConfig.xml
- 编写测试类