目录

1.Spring的两大核心是什么?谈一谈你对IOC的理解? 谈一谈你对DI的理解? 谈一谈你对AOP的理解?

2.Spring的生命周期?

3.Spring支持bean的作用域有几种吗? 每种作用域是什么样的?

4.Spring框架中都用到了哪些设计模式?

5.Spring事务的实现方式和实现原理?

6.Spring的常用注解


1.Spring的两大核心是什么?谈一谈你对IOC的理解? 谈一谈你对DI的理解? 谈一谈你对AOP的理解?

1. Spring的两大核心是:IOC(控制反转)和AOP(面向切面编程) DI(依赖注入)

2. IOC的意思是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。最直观的表达就是,IOC让对象的创建不用去new了,可以由spring根据我们提供的配置文件自动生产,我们需要对象的时候,直接从Spring容器中获取即可.

Spring的配置文件中配置了类的字节码位置及信息, 容器生成的时候加载配置文件识别字节码信息, 通过反射创建类的对象.

Spring的IOC有三种注入方式 :构造器注入, setter方法注入, 根据注解注入。

3. DI的意思是依赖注入,和控制反转是同一个概念的不同角度的描述,即应用程序在运行时依赖Io c容器来动态注入对象需要的外部资源。

4. AOP,一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect). SpringAOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

5. Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理:

(1)JDK 动态代理只提供接口代理,不支持类代理,核心 InvocationHandler 接口和 Proxy 类,InvocationHandler 通过 invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起,Proxy 利用 InvocationHandler 动态创建一个符合某一接口的的实例, 生成目标类的代理对象。

(2) 如果代理类没有实现 InvocationHandler 接口,那么 Spring AOP会选择使用 CGLIB 来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现 AOP。CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final,那么它是无法使用 CGLIB 做动态代理的。

2.Spring的生命周期?

1. 实例化一个Bean,也就是我们通常说的new

2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入

3. 如果这个Bean实现dao了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID

4. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)

5. 如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法

6. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用After方法,也可用于内存或缓存技术

7. 如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法

8. 如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法

注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例

9. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法

10. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

3.Spring支持bean的作用域有几种吗? 每种作用域是什么样的?

Spring支持如下5种作用域:

(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。

(2)prototype:每次请求都会为bean创建实例。

(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

(4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。

(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。

4.Spring框架中都用到了哪些设计模式?

1. 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例

2. 单例模式:Bean默认为单例模式

3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术

4. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate

5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--ApplicationListener

5.Spring事务的实现方式和实现原理?

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。

spring事务实现主要有两种方法

1、编程式,beginTransaction()、commit()、rollback()等事务管理相关的方法

2、声明式,利用注解Transactional 或者aop配置

6.Spring的常用注解

1. @Component(任何层)  @Controller  @Service  @Repository(dao): 用于实例化对象

2. @Scope : 设置Spring对象的作用域

3. @PostConstruct @PreDestroy : 用于设置Spring创建对象在对象创建之后和销毁之前要执行的方法

4. @Value: 简单属性的依赖注入

5. @Autowired: 对象属性的依赖注入

6. @Qualifier: 要和@Autowired联合使用,代表在按照类型匹配的基础上,再按照名称匹配。

7. @Resource 按照属性名称依赖注入

8. @ComponentScan: 组件扫描

9. @Bean: 表在方法上,用于将方法的返回值对象放入容器

10. @PropertySource: 用于引入其它的properties配置文件

11. @Import: 在一个配置类中导入其它配置类的内容

12. @Configuration: 被此注解标注的类,会被Spring认为是配置类。Spring在启动的时候会自动扫描并加载所有配置类,然后将配置 类中bean放入容器

13. @Transactional 此注解可以标在类上,也可以表在方法上,表示当前类中的方法具有事务管理功能。

Spring的原理分析相关推荐

  1. spring ioc原理分析

    spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...

  2. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包

    浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...

  3. Spring事务原理分析-部分一

    Spring事务原理分析-部分一 什么事务 事务:逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败. 事务基本特性 ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要 ...

  4. Spring事务原理分析(一)--@EnableTransactionManagement 到底做了什么?

    目录 一.概述 二.事务的ACID属性 三.事务的隔离级别 四.事务的传播行为 五.Spring声明式事务环境搭建 六.@EnableTransactionManagement分析 七.AutoPro ...

  5. Spring Security原理分析

    本文来简单的分析下Spring Security 使用原理.在前面的几节中,已经对 Spring Security 有了一个比较全的使用体验了,这节我们简单的介绍下 Spring Security 基 ...

  6. 【笔记】Spring 事务原理分析和源码剖析

    文章目录 概述 源码解析 xml 配置解析 事务代理类的创建 事务拦截器的实现 切面实现 事务处理实现 总结: 资料 概述 事务处理是一个重要并且涉及范围很广的领域,涉及到并发和数据一致性方面的问题. ...

  7. 史上最烂 spring aop 原理分析

    盗引·中篇·spring aop spring aop: jdk 动态代理和 cglib 动态代理的特点.区别.使用方式.原理及各自对反射的优化.二者在 spring 中的统一.通知顺序.从 @Asp ...

  8. Spring工作原理分析

    1. 控制反转IoC Spring的核心功能就是IoC,将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的藕合度. 具体来说就是,在applicationC ...

  9. Spring Boot----Dubbo原理分析

    环境:需要创建一个dubbo.xml 通过@ImportResource()导入xml: 1.首先spring启动解析配置文件的每一个标签的总接口是 org.springframework.beans ...

最新文章

  1. ZeroClipboard跨浏览器复制粘贴
  2. CVPR 2020论文开源项目一页看尽,附代码论文
  3. CMD中使用attrib命令设置文件只读、隐藏属性详解
  4. 25行代码AC_ 2017年C/C++ A组第四题 方格分割(dfs剪痕+解题报告)
  5. 前端学习(539):全屏布局得实现
  6. 上世纪八九十年代的收录放音机拆解
  7. Spring Cloud Zuul重试机制探秘
  8. 使用 jQuery Mobile 与 HTML5 开发 Web App (六) —— jQuery Mobile 内容格式
  9. poj 2528 Mayor's posters 线段树+离散话!!!
  10. Arcmap坐标系转换通用教程【简单明了】
  11. 轻松转换矢量图的小工具Vector Magic
  12. 通用 DAO 接口设计
  13. 判断图书的ISBN号码是否正确
  14. 用python对鹿晗、关晓彤微博进行情感分析 哭着学习学习~
  15. 雷鸣的游戏人生(一) --- 三个笑话
  16. 上海航芯|物联网安全芯片ACL16简介
  17. 数据库资源博客---小麦苗BEST
  18. ConcurrentHashMap1.7 最最最最最详细源码分析
  19. react-native 调用第三方 SDK
  20. Map集合以及Map集合的实现类Stream流的使用

热门文章

  1. 数据库设计(一) 需求分析
  2. 【MySQL】查看支持的字符集show character set;
  3. 互联网金融中的数据挖掘技术应用
  4. android把音乐存到sd卡上,如何将音乐文件从原始文件夹保存到SD卡中android
  5. Xilinx ZYNQ Ultrascale+ 性能测试之 PL/PS PCIe Root Port NVMe
  6. 从认知智能的角度认识ChatGPT的不足
  7. 7-24 到底是不是太胖了 (10分)
  8. python-windows安装cuda+cudnn+pytorch
  9. 【思想】《人生效率手册》
  10. 【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)