一、Spring
1.IoC(Inversion of Control) 控制反转
- 将对象控制权转移到外部,解决耦合度较高的问题
- IoC容器中创建的对象叫做bean
2.DI(Dependency Injection) 依赖注入
3.bean生命周期(初始化方法)
- 创建对象
- 执行构造方法
- 执行属性注入(set操作)
- 执行bean初始化方法
- 使用bean
- 执行业务操作
- 关闭/销毁容器
- 执行bean销毁方法
4.AOP(Aspect Oriented Programming) 面向切面编程
- 在不惊动原始设计的基础上为其进行功能增强(spring无侵入式理念)
- 连接点(方法的执行,好像只要有一个就行,然后抽取通知,给其他切入点添加相同的功能)、切入点(需要加功能的地方)、通知 (共性方法)、通知类(定义通知的类)、切面(通知与切入点的对应关系)。
- 目标对象(target)、代理(Proxy)
- 切入点:需要增强功能的地方
- 切入点表达式:描述需要增强功能的地方的方法
- AOP可以获取参数后进行相关处理,比如用户输入密码进行处理后然后再与后端进行比较。
5.AOP工作流程(SpringAOP本质代理模式)
- 启动spring容器
- 读取所有切面配置中的切入点
- 初始化bean,判定bean对应的类中的方法是否匹配到任意切入点(将每个bean中方法与咱们通知类中设置的切入点比较)
- 匹配失败(即没有匹配的切入点,这个bean咱们不用管,没有使用AOP),创建对象
- 匹配成功(这个地方要添加功能,使用了AOP),创建原始对象(目标对象)的代理对象
- 获取bean执行方法
- 获取bean,调用方法并执行,完成操作。
- 获取的bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作。
6.AOP通知类型
- 前置通知 --------@Before
- 后置通知--------@After
- 环绕通知(重点)--------@Around 需要在参数添加(ProceedingJoinPoint pjp)对原始方法进行调用,如果哪个方法有返回 值,我们要用pjp接住,然后在共性方法里返回它,共性方法返回值类型写Object,环绕通知要抛异常,是担心切入点本身有 异常。
- 返回后通知(了解)--------@AfterReturning
- 抛出异常后通知(了解)--------------@AfterThrowing
7.AOP通知获取数据
8.Spring事务
- 不仅可以再数据层开,也可以在业务层开
- spring事务是可以在业务层上开启的事务
- 注解开发使用事务,要先在jdbcConfig配置类中配置jdbc的bean事务对象PlatformTansationalManager,然后还要在SpringConfig配置类中开启事务注解EnableTansationalManager,然后你哪个方法需要开启事务就在那个方法的接口上添加spring事务注解(@Transational)
- Mybatis框架用的是jdbc的事务
- spring开启事务的那个接口叫做事务管理员,参与spring事务的那些个事务叫做事务协调员。
- 事务传播行为,propagation ,事务协调员可以不和事务管理员一起玩(注意,哪个不玩就哪个自己开),自己新开事务,但是要用try-finally,一个代码块一个事务
二、SpringMVC
9.SpringMVC
- SpringMVC和servlet功能等同一样,属于web开发技术
- SpringMVC是一种基于java实现MVC模型的轻量级web框架
- 使用简单,开发便捷。
- SpringConfig和SpringMvcConfig这两个在处理bean控制时,要单独拿到外面去,不然会冲突 。
- 接收json数据,先导jackson-databind坐标,然后在SpringMvcConfig配置类中添加@EnableWebMvc,最后在接收参数哪里记得要加@RequestBody,就可以拿到json类型的集合、对象、封装有对象的集合等。
10.响应
- 文本
- json数据
- 页面跳转不用加@ResponseBody,字符串和对象还有集合对象都要加@ResponseBody。目 的是:把对象转换成json数据,放到这个响应体中响应给也页面。
- @ResponseBody如果你的返回值是String,就将你的返回值作为响应体响应到页面,但是如 果你的返回值是对象、集合,它就将你的对象转换成json格式响应给页面。
- json格式的接收都要在那个方法中参数前添加@RequestBody,json格式的响应都要加方法上@ResponseBody,这两个注解起到转换格式的作用。
11.Rest风格
- Rest(Representational State Transfer),表现形式状态转换。
- 隐藏资源的访问行为
- 常用:GET、POST、PUT、DELETE.
- 根据路径和资源的请求方式就可以知道请求的哪个资源
- 是风格不是规范,可以被打破,但是都按他的来。
- 根据Rest风格对资源进行访问称为RESTful。
- 新增:post
- 删除:delete
- 修改:put
- 查询:get
- 如果需要参数另外在参数中添加@PathVariable,告诉它参数来自路径。
- 这三个都是用来接收参数,第一个是接收json数据,第二个是接收url地址传参或表单传参, 第三个是我们用Restful进行开发时,参数较少时,例如1个,可以用这个接收,通常用于传递 id值
@RequestBody
@RequestParam
@PathVariable
- 当我们用Restful开发时,可以简写很多东西,
- 用@RestController直接合并@Controller和@ResponseBody
- 然后根据不同的请求方法选择不同的mapping
- @PostMapping
- @DeleteMapping
- @PutMapping
- @GetMapping
12.项目异常处理方案
- 业务异常(BusinessException)
用户规范或不规范的操作产生的异常 - 系统异常(SystemException)
项目中可预计无法避免的异常 - 其他异常(Exception)
编程人员未预期到的异常
13.其他
- 在ssm项目中,修改了前端的页面,是可以实时生效的,不用重启服务器。
- 拦截器和过滤器不一样,拦截器是SpringMvc中的技术,拦截器是在Controller层前后动态拦截方法的调用,浏览器发出的请求经过服务器、过滤器到达spring的中央处理器,然后先将请求给到拦截器,符合要求才能调用Controller层的一些方法,调用后也要经过拦截器,然后才将json等数据返回给浏览器。
- 静态资源的访问直接给到服务器处理就行,动态的资源先经过servlet技术中的过滤器然后给到SpringMvc处理。
- 客户端每次向服务端发出的一次http请求,都是一个线程。