首页 > 其他分享 >spring刷题记录——to be continue

spring刷题记录——to be continue

时间:2024-05-08 17:23:46浏览次数:19  
标签:容器 Spring bean Bean continue spring 注解 执行 刷题

  在牛客网刷的题目,类似于补基础了?

  这里按照知识点进行分类,因为发现有些同样的知识点不同的题目还是很痛苦。

  这里就不用颜色标记了,因为我觉得都要记。

 Spring容器篇

    Spring容器也叫做Ioc容器(Ioc,在我之前写的随笔里面也有谈到),本质上就是一个工厂。

    Spring容器不仅可以管理Bean,还能管理Bean的生命周期、作用域。

    (放链接时想要大家都可以去看,作为记录这里只是写一些简短内容,链接通常会有更加复杂的内容。)

    一文读懂 Spring Bean 的生命周期_spring bean的生命周期-CSDN博客

      Bean的生命周期:

    •   实例化 Instantiation
    •   属性赋值 Populate
    •   初始化 Initialization
    •   销毁 Destruction

      具体的代码:

protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException {
    BeanWrapper instanceWrapper = null;
    if (mbd.isSingleton()) {
        instanceWrapper = (BeanWrapper)this.factoryBeanInstanceCache.remove(beanName);
    }

    if (instanceWrapper == null) {
        // 实例化阶段
        instanceWrapper = this.createBeanInstance(beanName, mbd, args);
    }

    ...

    Object exposedObject = bean;

    try {
        // 属性赋值阶段
        this.populateBean(beanName, mbd, instanceWrapper);
        // 初始化阶段
        exposedObject = this.initializeBean(beanName, exposedObject, mbd);
    } catch (Throwable var18) {
        ...
    }

    ...
}

      Bean的作用域:

        singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。(SpringBean的默认作用范围)
        prototype : 每次请求都会创建一个新的 bean 实例。
        request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
        session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
        global-session: 全局 session 作用域,仅仅在基于 Portlet 的 web 应用中才有意义,Spring5 已经没有了。Portlet 是能够生成语义代码(例如:HTML)片段的小型 Java Web 插件。它们基于 portlet 容器,可以像 servlet 一样处理 HTTP 请求。但是,与 servlet 不同,每个 portlet 都有不同的会话。
    Spring容器一般是自动创建的,一个类实现ApplicationContextAware接口,重写setApplicationContext方法就可以获取到ApplicationContext对象。

    Spring容器的顶层接口时BeanFactory,而常用的接口是ApplicationContext。

    在BeanFactory定义方法中,getBean(String name)方法是从Spring容器中获取对应Bean对象的方法,如存在,则返回该对象。containsBean(String name)方法用于判断Spring容器中是否存在该对象。isSingleton(String name)方法用于判断Bean对象是否为单例对象。而getBean用来获取Bean的Class类型。

  

 SpringAOP篇:

    (来自于牛客网用户Mr丶PYK)

    aop的五类通知: 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。

    正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。

    异常返回通知[After throwing advice]:在连接点抛出异常后执行。

    返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。

    环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。
    环绕通知可以决定目标方法的调用也可以控制返回对象。

  Spring事务:

    Spring规定的7种类型的事务传播行为:   

     做题的时候记得看清楚(凝视)。

     spring事务隔离级别;

     幻读脏读什么的在隔壁的mysql刷题中也有提到。

     补充知识: 事务属性的种类:   传播行为、隔离级别、只读和事务超时。 

     

  

 

 Spring注解篇:

    (该篇主要是写一些注解的源码内容的)

     @RequestMapping注解的属性包括 method , value , params等。

     @Conditional是SpringMVC的注解,条件装配。

Spring @Conditional注解 详细讲解及示例_spring conditional-CSDN博客

     @Autowired注解,如果一个类有多种类型,那么容器注入时就会有困扰。此时可以使用@Primary和@Qualifier注解。

      (以下来自牛客网用户 李橙子)

      @Autowired
      注入声明的SpringBean对象,根据一定的规则首先按照注入的类型去查找,如果没有找到安装注入的名称去匹配你要注入的属性名称,如果都没有找到启动项目时抛出异常,@Autowired(required = false) 表示没有找到注入对象时,不抛异常,注入null。

     @Primary
      如果有多个相同类型的SpringBean,我们可以使用@Primary注解,优先注入带该注解标识的类,@Primary可以在多个类上标注,那就会抛异常。

     @Quelifier
      使用SpringBean的名称(SpringBean的名称都是唯一的)进行注入。

     以下是Spring MVC注解的讨论:

      @ControllerAdvice用于定义控制器的通知类,它可以对指定的控制器进行增强。

      @InitBinder用于定义控制器参数绑定规则,如转换规则,它会在参数转换之前执行。

      @ModelAttribute用于定义控制器方法执行之前,对数据模型的操作。
      @ExceptionHandler用于定义控制器发生异常后的操作。

      end;

     @PostContruct是给Bean初始化,@PreDestroy是销毁,这俩控制Bean生命周期

     @EnableAutoConfiguration注解,该注解结构如下:

     以上的总结成四句话:该注解由组合注解@SpringBootApplication引入。该注解作用是开启Spring Boot自动配置。该注解会扫描各个jar包下的spring.factories文件,并加载文件中注册的AutoConfiguration类等。@EnableAutoConfiguration的关键功能是通过@Import注解导入的ImportSelector来完成的。

    (补充知识:

    .class文件理解:详解.class文件-CSDN博客
      在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题并且保留了解释型语言可移植的特点,而通过即时编译器(jit)又有编译型语言执行效率高的特点。所以 Java 程序运行时比较高效。Java通过字节码文件和虚拟机jvm之间的关系,做到了平台无关性,一次编译,各平台都可运行。

      补充Clojure(Lisp 语言的一种方言)、Groovy、Scala 等语言都是运行在 Java 虚拟机之上。下图展示了不同的语言被不同的编译器编译成.class文件最终运行在 Java 虚拟机之上。
    )对于class我就是理解成了另一种形式的缓存文件。

    SpringBoot注解中,主要功能是启动Spring应用程序上下文时进行自动配置的注解是@EnableAutoConfiguration(原因如上)。

 

    @Autowired是Spring提供的注解,@Resource是JDK提供的注解。它们的区别是,@Autowired只能按类型注入,@Resource默认按名称注入,也支持按类型注入。

    @Autowired注解可以用于成员变量,方法,构造方法上。

    @Qualifier用于声明Bean的名称,可以引用默认名称,能引用Bean的自定义名称。(Bean注解可以指定名称,写了就是自定义名称,不写就是默认名称)

    @Bean注解可以用于装配任何Bean。

 

 Spring MVC:

    在控制器的方法中,我们可以直接使用Request、Response对象处理请求与响应(有印象,是那个参数)

    ModelAndView对象,既可以存储模型数据,又可以存储模板路径。

    Model对象只能存放模型数据,对象可以被自动实例化。

    Spring MVC的核心组件是DispatcherServlet,负责分发所有的请求。

    View是视图的顶层接口(在做的时候脑子蒙蒙的,现在想起来就是这样子的)

    AbstractJackson2View不是逻辑视图,它不依赖ViewResolver的定位,直接将模型渲染为json。

    AbstractUrlBasedView是逻辑视图,它依赖ViewResolver定位模板,然后将模型传入模板并渲染。

    在Spring MVC中,Model、ModelMap、ModelAndView都可以作为数据模型对象,以上述类型作为控制器的方法参数时,Spring MVC会自动实例化这些类型。ModelAttribute是注解,用于定义控制器方法执行之前,对数据模型的操作。

    Spring MVC拦截器包含三个方法:preHandle()、postHandle()、afterCompletion()。 

    (拦截器,理解成断点类似的就可以了)

 

 

 

 

 

  参考链接:

       https://blog.csdn.net/riemann_/article/details/118500805

       https://blog.csdn.net/xcy1193068639/article/details/81491071

       https://blog.csdn.net/isbn0123/article/details/118642699

标签:容器,Spring,bean,Bean,continue,spring,注解,执行,刷题
From: https://www.cnblogs.com/clina/p/18179366

相关文章

  • 微服务Spring Cloud17_熔断器Hystrix7
    一、简介Hystrix在英文里面的意思是豪猪,它的logo看下面的图是一头豪猪,它在微服务系统中是一款提供保护机制的组件,和eureka一样也是由netflix公司开发。主页:https://github.com/Netflix/Hystrix/ 那么Hystrix的作用是什么呢?具体要保护什么呢?Hystrix是Netflix开源的一......
  • docker - [15] springboot微服务打包docker镜像
    步骤:1、构建Springboot项目2、打包应用3、编写dockerfile4、构建docker镜像5、发布运行   一、构建Springboot项目(1)创建一个SpringBoot(以下这种方式对jdk版本有要求,可以创建一个Maven项目使用jdk8)(2)使用的SpringBoot版本是3.x,所以要求jdk17+(3)修改SpringBoot和jd......
  • 探索网站支付系统的奥秘,从Vue3和Spring Boot开始(入门级项目实战+在线教程)附赠项目源码
    你是否曾经在购物时,对着电脑屏幕前的“支付成功”四个字感到好奇?这背后的秘密究竟是什么?今天,让我们一起揭开支付系统的神秘面纱,探索其背后的技术实现。在这个基于Vue3和SpringBoot的支付项目实战中,我们将带你一步步了解支付系统的实现思路。这个项目不仅解决了常用支付方式的......
  • 微服务Spring Cloud17_负载均衡Ribbon6
    一、概述在刚才的案例中,我们启动了一个user-service,然后通过DiscoveryClient来获取服务实例信息,然后获取ip和端口来访问。但是实际环境中,往往会开启很多个user-service的集群。此时获取的服务列表中就会有多个,到底该访问哪一个呢?一般这种情况下就需要编写负载均衡算......
  • Jenkins发版时报错Failed to instantiate [io.seata.spring.annotation.GlobalTransac
    Failedtoinstantiate[io.seata.spring.annotation.GlobalTransactionScanner]:Factorymethod'globalTransactionScanner'threwexception;nestedexceptionisjava.lang.ExceptionInInitializerError一开始以为是seata配置有问题,但最近也没有动过,直接执行发版脚本就没事......
  • 「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)
    本教程将指导您如何生成一个可运行的GoogleWebToolkit(GWT)2.1和Spring应用程序,该应用程序为域模型实现了CRUD应用程序模式。在本教程中,您将学习如何:安装GoogleEclipse插件为GWT配置一个项目搭建从数据库表到一个现有的项目GWT编译部署应用程序注意:自定义Spring代码......
  • 谈springboot两种实现结构
    概述最近由于入职华海智汇,所以文章也少了,并不是自己懈怠了,而是华海的保密措施不允许我上班写文章了,更何况还有无尽的加班。。。。。。。。。唉,所幸现在习惯了好多,现在觉着该记录一下知识了。目前市场上,要实现Java项目主要有Maven和Gradle两种框架,其中Gradle是新兴势力,Maven是老牌......
  • 27-Spring源码分析(二)
    AOP源码分析1.AOP概述AOP(AspectOrientProgramming)利用代理模式,通过代理对象对被代理的对象增加功能。所以,关键在于AOP框架自动创建AOP代理对象,代理模式分为静态代理和动态代理。AspectJ使用静态代理,编译时增强,在编译期生成代理对象;SpringAOP使用动态代理,运行时......
  • Spring SpringMVC概述
    SpringMVC框架主要用于跟客户端交互,包括请求和响应。  前端控制器的作用就是把一些功能封装,我们在开发时就不用再写一些繁杂的代码了SpringMVC使用DispatcherServlet作为前端控制器,DispatcherServlet本质其实是一个Servlet 原先我们在访问时,客户端发起请求直接找Servlet......
  • SpringBoot+Thymeleaf渲染下拉框异常解决
    常规方式<selectclass="form-control"name="operationType"th:field="${itemTemp.operationType}"style="width:80%"th:disabled="${readonly}"><optionvalue="">选......