SSM 高级知识点

发布时间:2024年01月11日

1. Spring 依赖注入

1.1 依赖注入的三种方式

  • 通过构造器注入

        private AlarmContactService alarmContactService;
    
        private final AlarmService alarmService;
    
        private final SysUserService sysUserService;
    
        @Autowired
        public AlarmContactController(AlarmContactService alarmContactService, AlarmService alarmService,SysUserService sysUserService) {
            this.alarmContactService = alarmContactService;
            this.alarmService = alarmService;
            this.sysUserService = sysUserService;
        }
    

  • 通过 setter 注入

        private AlarmContactService alarmContactService;
    
        private AlarmService alarmService;
    
        private SysUserService sysUserService;
    
        @Autowired
        public void setAlarmContactService(AlarmContactService alarmContactService) {
            this.alarmContactService = alarmContactService;
        }
    
        @Autowired
        public void setAlarmService(AlarmService alarmService) {
            this.alarmService = alarmService;
        }
    
        @Autowired
        public void setSysUserService(SysUserService sysUserService) {
            this.sysUserService = sysUserService;
        }
    

  • 通过 filed 注入

        @Autowired
        private AlarmContactService alarmContactService;
    
        @Autowired
        private AlarmService alarmService;
    
        @Autowired
        private SysUserService sysUserService;
    

1.2 自动装配

? Spring 装配包括手动装配自动装配,手动装配方式可以基于 xml 装配、构造方法、setter 方法等。自动装配有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。

  1. no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。

  2. byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。

  3. byType:通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byType,之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。

  4. constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。

  5. autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方式。

2. Spring AOP 实现

2.1 什么是 AOP

? AOP (Aspect Orient Programming), 直译过来就是面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。

? "横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

图片描述

2.2 AOP 实现原理

? Spring 通过对目标对象使用代理模式生成代理对象的方式来实现 AOP。有两种主要的方式 JDK 的动态代理和 CGLIB 的动态代理,默认使用 JDK 方式。

2.3 AOP 使用场景

? 场景一: 记录日志

? 场景二: 监控方法运行时间 (监控性能)

? 场景三: 权限控制

? 场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )

? 场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )

3. Spring MVC 的拦截器

3.1 什么是拦截器

? Spring MVC 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于对处理器进行预处理和后处理,同时也提供了一种可以提取处理器中可重用部分的方式。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。

? 在一个项目中可以设置多个拦截器,这些拦截器按一定的顺序联结成一条链,这条链称为拦截器链。 在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用,拦截器也是 AOP 思想的具体实现。

3.2 拦截器的原理

? Spring MVC 中拦截器是实现了 HandlerInterceptor 接口的 Bean:

public interface HandlerInterceptor {
    boolean preHandle(HttpServletRequest request,
                      HttpServletResponse response,
                      Object handler) throws Exception;

    void postHandle(HttpServletRequest request,
                    HttpServletResponse response,
                    Object handler, ModelAndView modelAndView) throws Exception;

    void afterCompletion(HttpServletRequest request,
                         HttpServletResponse response,
                         Object handler, Exception ex) throws Exception;
}

  • preHandle():预处理回调方法,若方法返回值为 true,请求继续(调用下一个拦截器或处理器方法);若方法返回值为 false,请求处理流程中断,不会继续调用其他的拦截器或处理器方法,此时需要通过 response 产生响应;

  • postHandle():后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时可以通过 modelAndView 对模型数据进行处理或对视图进行处理

  • afterCompletion():整个请求处理完毕回调方法,即在视图渲染完毕时调用

    图片描述

3.3 拦截器和过滤器的区别

  1. 拦截器基于 java 的反射机制,而过滤器是基于函数回调
  2. 拦截器不依赖于 servlet 容器,过滤器依赖 servlet 容器
  3. 拦截器只能对 action 请求起作用,而过滤器则可以对几乎所有的请求起作用
  4. 在 action 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
  5. 拦截器可以获取 IOC 容器中的各个 bean,而过滤器就不行,这点很重要,在拦截器注入一个 service,可以调用业务逻辑

4. Spring Boot

4.1 Spring Boot 特点

? Spring Boot 的特点:

(1)快速开发 Spring 应用的框架

(2)内嵌 Tomcat 和 Jetty 容器,不需要单独安装容器,jar 包直接发布一个 Web 应用

(3)简化 Maven 配置,继承父工程这种方式,一站式引入需要的各种依赖

(4)基于注解的零配置思想

(5)和各种流行框架 Spring MVC、Mybatis、Spring Cloud 无缝整合

4.2 Spring Boot 常用注解

  • @SpringBootApplication:这个注解是 Spring Boot 最核心的注解,用在 Spring Boot 的主类上,标识这是一个 SpringBoot 应用,用来开启 Spring Boot 的各项能力。相关等同于@Configuration,@EnableAutoConfiguration 和@ComponentScan 三个注解同时使用。
  • @EnableAutoConfiguration:Spring Boot 自动配置开启注解。
  • @ConditionalOnXXXX:Spring Boot 基于@Conditional 扩展出的衍生注解,根据是否满足某一个特定条件来决定是否加载指定的 Bean。比如扩展出的注解有:@ConditionalOnBean、@ConditionalOnClass 等。
  • @ConfigurationProperties:基于类型安全的属性配置注入,可以将 properties 属性和一个 Bean 及其属性关联,从而实现类型安全配置。

5. Maven

5.1 Maven 是什么?

? Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。

  • 版本:Maven 有自己的版本定义和规则
  • 构建:Maven 支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。
  • 输出物管理:Maven 可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为。
  • 依赖关系:Maven 对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为
  • 文档和构建结果:Maven 的 site 命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。
  • 项目关系:一个大型的项目通常有几个小项目或者模块组成,用 Maven 可以很方便地管理

5.2 Maven 仓库

??仓库:存放 jar 的地方可以通过 Manen 坐标准确的找到仓库中的 jar 包并添加到工程依赖中。

? 仓库的分类:

??1、本地仓库:当前电脑上的仓库

??2、远程仓库:

? 私服:搭建在局域网中,一般公司都会有私服,私服一般使用 nexus 来搭建。具体搭建过程可以查询其他资料

? 中央仓库:架设在 Internet 上,像刚才的 springframework 就是在中央仓库上

5.3 Maven 坐标

??坐标:使用下面的三个向量在仓库中唯一的定位一个 Maven 工程 (jar 包)。

图片描述

5.4 Maven 命令

  • mvn clean:清理
  • mvn compile:编译主程序
  • mvn test-compile:编译测试程序
  • mvn test:执行测试
  • mvn package:打包
  • mvn install:安装

6. git

6.1 什么是 git?

? Git 是目前世界上最先进的分布式版本控制系统。

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

6.2 git 工作原理

图片描述

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

6.3 git 常用命令

  • git clone:拷贝一份远程仓库,也就是下载一个项目。
  • git push:上传远程代码并合并
  • git add?:添加文件到暂存区
  • git commit:提交暂存区到本地仓库。
  • git checkout:检出。最为常用的两种情形是创建分支和切换分支。
  • git pull:下载远程代码并合并

6.4 Svn 与 Git 的最主要的区别?

? Svn 是集中式的版本控制系统。可以看出 Svn 集中式版本控制都是把所有的版本存储在 Svn 服务器中且必须要联网到 Svn 服务器才可以进行版本的回退、更新等操作。

? 假如哪天 Svn 服务器坏了,那么所有的版本代码都将丢失,也就无法获取代码和回退版本等操作。

? Git 是分布式版本控制系统。使用 Git 每个电脑都有完整的版本号和日志信息。且没有网的时候,Git 照样可以工作,只是把代码提交到本地,待有网再提交到远程 Git 仓库。就算哪天 Git 服务器坏了也没事,因为本地仓库都保存了完整的版本。

6.5 Git、Github、Gitlab 与 Gitee 之间的关系

? Git:是一种版本控制系统,是一个命令,是一种工具,有点像 cmd(命令行工具)。

? Github:是一个基于 git 实现在线代码托管的仓库,向互联网开放,企业版要收钱。

? Gitlab:类似 github,一般用于在企业内搭建 git 私服,要自己搭环境。

? Gitee:即码云,是 oschina 免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。

? Git-ce:是社区版,gitlab-ee 是企业版,收费的。

文章来源:https://blog.csdn.net/qq_57747969/article/details/135443645
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。