# 架构学习笔记 --- 基础知识: 了解Bean及其使用; 了解容器及其使用; 了解事务及其使用; 了解框架的注解及其使用; 了解框架的插件及其使用; 了解框架的AOP概念及其使用; 了解框架的MVC模式及其作用和使用; 了解Restful的使用和作用; 了解SSM模式及其整合和使用; 了解框架的拦截器和使用; 了解Maven的作用和开发中的用法; 了解MybatisPlus的知识和使用; 学习框架外的知识; --- ### Bean bean是框架中的一个概念。就是将传统中的实例化的操作所抽象出来的一个专业词语。 其作用是将项目中的类进行一个自动化的实例化出来的一个对象东西。 比如: ```java public class Uses { private Integer id; private String number; private Integer iphone; private String workType; private String loginDate; private Integer loginNumber; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Integer getIphone() { return iphone; } public void setIphone(Integer iphone) { this.iphone = iphone; } public String getWorkType() { return workType; } public void setWorkType(String workType) { this.workType = workType; } public String getLoginDate() { return loginDate; } public void setLoginDate(String loginDate) { this.loginDate = loginDate; } public Integer getLoginNumber() { return loginNumber; } public void setLoginNumber(Integer loginNumber) { this.loginNumber = loginNumber; } } ``` 这里的代码中我省略了构造方法,无关紧要。但这通过框架所实例化出来的对象就是叫Bean。 bean本质上就是一个对象,不过是以抽象的概念来表达出来。 它的作用是可以让我们对它里面的getter和setter方法进行操作,这样就可以处理这个对象下所存放的数据。 --- ### 容器 框架中一个可以存放Bean对象的地方。 我们可以通过这个地方获取我们所实例化好的对象【Bean】。 它的实现方式有以下: 1. 通过**ClassPathXmlApplicationContext**类来实现。 2. 通过**FilesystemPathApplication**函数来实现。 3. 通过注解的方式来实现。 4. 通过**AnnotationConfigApplicationContext**类来实现。 --- ### 事务 ---- ### 注解 这里我们学习注解,在学习前,我们这里回顾第一节的知识点。第一节学习了Bean,那么在第一节中介绍了有通过注解的形式来将Bean注入到框架中。然后调用它 。 但是我们应该以什么格式的去注入呢? 答:通过@Component的注解来进行注入。 通过@Component的注解将一个类注入到框架的容器中,然后我们就可以在主函数中通过容器【Application Context】来进行get Bean,这样就可以获取到了我们注入到容器里的bean了。接着就可以定义一个bean类的变量来接收这个对象。从而使用这个对象里面的方法。 另外一种bean的注解是@Bean。这种Bean是用来注解到方法中,这个方法返回值是一个Bean对象。如果在注解中添加名字,该名字就是Bean的名字。在主函数中就可以获取到并使用它。 --- 框架外的知识: VO、DTO、Entity、PO、POJO等相关知识: 1、entity 里的每一个字段,与[数据库](https://cloud.tencent.com/solution/database?from=10680)相对应, 2、vo 里的每一个字段,是和你前台 html 页面相对应, 3、dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。 举个例子: 你的html页面上有三个字段,name,pass,age 你的数据库表里,有两个字段,name,pass , 注意没有 age。 而你的 vo 里,就应该有下面三个成员变量 ,因为对应 html 页面上三个字段 。 ```javascript private string name; private string pass; private string age; ``` 复制 这个时候,你的 entity 里,就应该有两个成员变量 ,因为对应数据库表中的 2 个字段 。 ```javascript private string name; private string pass; ``` 复制 到了这里,好了,业务经理让你做这样一个业务“年龄大于 20 的才能存入数据库,这个时候,你就要用到 dto 了, 1)你要先从页面上拿到 vo,然后判断 vo 中的 age 是不是大于 20。 2)如果大于 20,就把 vo 中的 name 和 pass 拿出来,放到 dto 中。 3)然后在把 dto 中的 name 和 pass 原封不动的给 entity,然后根据 entity 的值,在传入数据库。 这就是他们三个的区别。 PS: dto 和 entity 里面的字段应该是一样的,dto 只是 entity 到 vo,或者 vo 到 entity 的中间过程,如果没有这个过程,你仍然可以做到增删改查,这是根据具体公司规范来的 。 层级之间的数据转换框架: Java中比较流行的自动化转换代码的工具有以下几个: 1. MapStruct:MapStruct是一个代码生成器,可以基于注释或接口来自动生成DTO和Entity之间的转换代码。它的主要功能包括自动转换复杂对象和集合、支持多种映射方式等。 2. ModelMapper:ModelMapper是一个开源库,可以用来轻松地进行DTO和Entity之间的转换。它支持自定义转换规则和类型转换器、自动忽略 null 值,方便易用。 3. Dozer:Dozer是另一个开源转换库,可以自动转换两个类之间的属性。它支持通过XML或者API配置映射规则,使用起来很方便。 Jwt : 由三部分组成:Header、Payload、Signature Header 表示这个token是由哪些编码和类型。 Payload 表示用户的载体用来加密用户的名字和权限 Signature 表示加密的方式和加密前两部分。 --- ## 进阶 在 Spring Security 中,每个安全过滤器都有一个默认的执行顺序,可以通过实现 `Order` 接口来自定义 Filter 的执行顺序。Spring Security 会根据 `Order` 接口的实现类中的 getOrder() 方法来决定每个 Filter 的执行顺序。如果没有实现 `Order` 接口,那么默认 `FilterChainProxy` 的执行顺序为 0,其他的 Filter 按照注册顺序依次执行。可以通过 `setOrder(int order)` 方法来设置 Filter 的执行顺序。值越小,执行优先级越高。 `setOrder(int order)` 方法是为了设置 Filter 的执行顺序,即执行的优先级。值越小,执行优先级越高。如果没有设置,则默认为 0。在 Spring Security 中,每个过滤器都有一个执行顺序,执行顺序确定了它的执行顺序。 需要注意的是,设置过滤器执行顺序时,要确保已知道所有过滤器的默认执行顺序和他们之间的依赖关系,才能准确地设置过滤器之间的执行优先级。此外,为了避免与其他过滤器的优先级冲突,Spring Security 的默认过滤器的执行顺序从 100 开始,因此自定义过滤器的执行优先级应该小于 100。 总之,setOrder 函数的结果是设置过滤器的执行顺序,所传递的数值越小,执行优先级越高,但是需要注意与其他过滤器的优先级冲突问题。