Spring相关知识点的总结与梳理

1)、IOC:控制反转,某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借由Bean配置来进行控制

2)、DI:依赖注入,让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖

3)、IOC主要分为3种类型:构造函数注入、属性注入和接口注入。Spring支持构造函数注入和属性注入

4)、类装载器ClassLoader

类装载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。在Java中,类装载器把一个类装入JVM中,需要经过以下步骤:

(1)装载:查找和导入Class文件

(2)链接:

A.校验:检查载入Class文件数据的正确性

B.准备:给类的静态变量分配存储空间

C.解析:对符号引用转换成直接引用

(3)初始化:对类的静态变量、静态代码块执行初始化工作

类装载工作由ClassLoader及其子类负责。ClassLoader负责在运行时查找和装入Class字节码文件。JVM在运行时会产生3个ClassLoader:跟装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(应用类装载器)。其中, 根装载器不是ClassLoader的子类,它使用C++语言编写,因而在Java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类,其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载Classpath路径下的类包

跟装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下,使用AppClassLoader装载应用程序的类

JVM装载类时使用全盘负责委托机制,全盘负责是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入;委托机制是指先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类

5)、属性注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方法调用Setter方法注入属性值

6)、SprIng只会检查Bean中是否有对应的Setter方法,至于Bean中是否有对应的属性成员变更则不做要求

7)、JavaBean也允许以大写字母开头的属性变量名,不过必须满足变量的前两个字母要么全部大写,要么全部小写的要求

8)、标签接口是没有任何方法和属性的接口,它不对实现类有任何语义上的要求,仅仅表明它的实现类属于一个特定的类型。它主要有两个用途:第一,通过标签接口标识同一类型的类,这些类本身可能并不具有相同的方法,如Advice接口;第二,通过标签接口使程序或JVM采取一些特殊处理,如java.io.Serializable,它告诉JVM对象可以被序列化

9)、AOP相关名词

(1)连接点:一个类或一段程序代码拥有一些具有边界性质的特定点,Spring仅支持方法的连接点

(2)切点:通过切点定位特定的连接点

(3)增强:织入目标类连接点上的一段程序代码

(4)目标对象:增强逻辑的织入目标类

(5)引介:引介是一种特殊的增强,它为类添加一些属性和方法

(6)织入:将增强添加到目标类的具体连接点上的过程

(7)代理:一个类被AOP织入增强后,就产生了一个结果类,它是融合了原类和增强逻辑的代理类

(8)切面:切面由切点和增强组成

10)、增强类型

(1)前置增强:org.springframework.aop.BeforeAdvice代表前置增强,表示在目标方法执行前实施增强

(2)后置增强:org.springframework.aop.AfterReturningAdvice代表后置增强,表示在目标方法执行前后实施增强

(3)环绕增强:org.aopalliance.intercept.MethodInterceptor代表环绕增强,表示在目标方法执行前后实施增强

(4)异常抛出增强:org.springframework.aop.ThrowsAdvice代表抛出异常增强,表示在目标方法抛出异常后实施增强

(5)引介增强:org.springframework.aop.IntroductionInterceptor代表引介增强,表示在目标类中添加一些新的方法和属性

11)、ThreadLocal是保存线程本地化对象的容器。当运行于多线程环境的某个对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每个线程都可以独立地改变自己的副本,而不会影响到其他线程所对应的副本

InheritableThreadLocal继承于ThreadLocal,它自动为子线程复制一份从父线程那里继承而来的本地变量:在创建子线程时,子线程会接收所有可继承的线程本地变量的初始值

ThreadLocal类中有一个Map,用于存储每个线程的变量副本,Map中元素的键为线程对象,值为对应线程的变量副本

同步机制采用了以时间换空间的方式,访问串行化,对象共享化;而ThreadLocal采用了以空间换时间的方式:访问并行化,对象独享化

12)、SpringMVC流程图

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Spring Cloud原理详解

    之前一直在看<Spring Cloud微服务实战>,最近又看了架构笔记的<拜托!面试请不要再问我Spring Cloud底层原理>,对Spring Cloud的主要组件的原理有了更深的理解,特地做一下总结 一.Spring Cloud核心组件:Eureka (1)Netflix Eureka 1).Eureka服务端:也称服务注册中心,同其他服务注册中心一样,支持高可用配置.如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式.它允许在分片故

  • SpringBoot中关于static和templates的注意事项以及webjars的配置

    1. 默认情况下, 网页存放于static目录下, 默认的"/"指向的是~/resouces/static/index.html文 2. 如果引入了thymeleaf, 则默认指向的地址为~/resouces/templates/index.html <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymel

  • SpringBoot之Java配置的实现

    Java配置也是Spring4.0推荐的配置方式,完全可以取代XML的配置方式,也是SpringBoot推荐的方式. Java配置是通过@Configuation和@Bean来实现的: 1.@Configuation注解,说明此类是配置类,相当于Spring的XML方式 2.@Bean注解,注解在方法上,当前方法返回的是一个Bean eg: 此类没有使用@Service等注解方式 package com.wisely.heighlight_spring4.ch1.javaconfig; publ

  • 详解java中spring里的三大拦截器

    Filter 新建 TimeFilter @Component public class TimeFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("time filter init"); } @Override public void doFilter(ServletRequest s

  • Java五子棋AI实现代码

    思路: ①五子棋界面的实现 ②交互下棋的实现 ③重绘 ④AI,实现人机对战 五子棋和简单AI的实现: 首先将五子棋的界面写出来. 首先我们写一个接口类,定义好棋盘的数据(目的是方便修改). public interface Config { public static final int X0=50;//左上角起点X值 public static final int Y0=50;//左上角起点Y值 public static final int ROWS=15;//横向线数 public sta

  • Spring多对象引入方法

    在以前使用xml配置注入的时候, 可以通过name名称注入, 也可以使用type类型注入. 在SpringBoot中, 可以使用@Resource和@Autowried注解进行注入. @Resource 默认会使用名称进行注入,  如果找不到, 会使用自动使用类型进行注入. @Autowried, 则会在容器中寻找匹配的对象, 如果找到则注入成功, 如果没找到或者找到多个, 则会报错. 但是, 如果有多个的情况下, 可以使用@Qualifier("别名") 进行约束. 1.创建Bean

  • Spring Boot集成Java DSL的实现代码

    Spring Integration Java DSL已经融合到Spring Integration Core 5.0,这是一个聪明而明显的举动,因为: 基于Java Config启动新Spring项目的每个人都使用它 SI Java DSL使您可以使用Lambdas等新的强大Java 8功能 您可以使用 基于IntegrationFlowBuilder的Builder模式构建流 让我们看看基于ActiveMQ JMS的示例如何使用它. Maven依赖: <dependencies> <

  • java Springboot实现多文件上传功能

    前端采用layui框架,讲解多文件上传的完整实现功能. 前端html重点代码如下: <div class="layui-form-item"> <label class="layui-form-label">上传文件</label> <div class="layui-input-block"> <div class="layui-upload"> <butto

  • 浅谈Java中Spring Boot的优势

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的.产品级别的 Spring 应用. 作为一名 Java 程序员如果你已经厌恶了传统的开发模式,希望有一个全新的框架可以提供快速开发,简单集成的编程体验,强烈建议你学习了解 Spring Boot .

  • JavaTCP上传文本文件代码

    基于聊天客户端的基础上的文件(TXT文件)传输 客户端代码: public class UploadClient { public static void main(String[] args) throws UnknownHostException, IOException { // TODO Auto-generated method stub //1,创建socket客户端对象 Socket s = new Socket("localhost",10005); //2,读取本地文

随机推荐