踩坑记录
1. 数据库时区有关异常
- 解决方案:添加时区参数
jdbc:mysql://localhost:3306/DATABASE?serverTimezone=UTC
2. 更换Maven源
- 解决方案:在setting.xml中加入国内源
天道酬勤
系统中异常包括两类:预期异常和运行时异常 RuntimeException
,前者通过捕获异常从而获取异常信息, 后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 系统的 dao、service、controller 出现都通过 throws Exception
向上抛出,最后由 springmvc
前端 控制器交由异常处理器进行异常处理。
自定义异常处理类,并实现HandlerExceptionResolver
接口。
1 | @Component |
SpringMVC 是一种基于Java
的实现MVC设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork
的后续产品,已经融合在 Spring Web Flow
里面。Spring
框架提供了构建 Web 应用程序的全功能 MVC 模块。
它通过一套注解,让一个简单的Java
类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful
编程风格的请求。
Spring MVC
的执行流程如下
@RequestMapping
:建立请求URL和处理方法之间的对应关系,作用在类或者方法上。
@RequestParam
:把请求中的指定名称的参数传递给控制器中的形参赋值
举例:
1 | @RequestMapping("/useRequestParam") |
@RequestBody
:直接以key=value
的形式获取请求体内容(String
类型)或者Java
对象。用于POST
请求。
@PathVaribale
:用于绑定 url中的占位符。例如:请求 url 中 /delete/{id}
,这个{id}
就是 url 占位符。
@ModelAttribute
:出现在方法上,表示当前方法会在控制器方法之前执行。也可以出现在参数上,获取指定的数据给参数赋值。
应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
Mybatis
是一个优秀的基于Java
的持久层框架,它内部封装了jdbc
,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement
等繁杂的过程。
官方网站:https://mybatis.org/mybatis-3/zh/index.html
Mybatis
通过xml
或注解的方式将要执行的各种statement
配置起来,并通过Java
对象和statement
中 sql
的动态参数进行映射生成最终执行的 sql
语句,最后由 Mybatis
框架执行 sql
并将结果映射为 java
对象并 返回。
1 | <?xml version="1.0" encoding="UTF-8"?> |
运用动态代理的方式对核心业务类的方法进行增强,对核心逻辑和非核心逻辑进行隔离,把非核心逻辑织入到核心业务逻辑之中。开发人员在开发时可以专注于核心业务逻辑,使各个业务逻辑之间的耦合度降低,提高程序的可复用性。
Jointpoint
(连接点)
被拦截的方法,通常是业务层的所有方法。
Pointcut
(切入点)
并不是所有业务层的方法都需要被拦截增强。那些需要被增强的方法是切入点。
Advice
(通知/增强)
指拦截到的Jointpoint
之后需要做的事情。通知包括前置通知、后置通知、异常通知、最终通知、环绕通知。
Taeget
(目标对象)
被代理的对象。
Weaving
(织入)
是指把增强应用到目标对象来创建代理对象的过程。
Proxy
(代理)
一个类被AOP
织入增强后,产生的一个结果代理类。
Aspect
(切面)
是切入点和通知的结合。(需要手动配置)
bean
对象的创建、依赖关系交给Ioc
容器来管理,无需手动new
对象,方便解耦,便于开发。
Spring
容器的最顶层接口是BeanFactory
,实际开发中常用ApplicationContext
。
两个接口的区别:
ApplicationContext
:立即加载。读取配置文件后马上创建对象放入容器。BeanFactory
:延迟加载。什么时候根据id
获取对象,什么时候才真正创建对象。ApplicationContext
的三个常用实现类
ClassPathApplicationContext
:加载类路径下的配置文件。
FileSystemXmlApplicationContext
:加载磁盘任意路径下的配置文件。
AnnotationConfigApplicationContext
:读取注解 创建容器。