Spring 学习笔记

1.spring的理解?

概述:

spring是一个生态,是基石,其它框架是以其为基石开发,都是spring的扩展。

2.Spring事务的传播机制(传播规则)?

 3.Spring框架中的单例Bean是线程安全的么 ?

3.1什么是线程安全?

什么是线程安全和线程不安全 - 简书 (jianshu.com)

4.Spring框架中使用了哪些设计模式及  应用场景?

 5.Spring事务的隔离级别有哪些?

因为主要还是基于数据库的事务隔离级别来的,所以其事务隔离级别和数据库的事务隔离级别是一模一样的。

 ?可能的问题: 如果在spring代码中和 数据库中都设置了隔离级别,那么应该以谁设置的隔离级别为准呢?

Spring的配置为准。

6.Spring事务的实现方式原理是什么?

 改错:如果有事务处理,那么会先把事务的自动提交给“关闭”。

Spring的事务是如何回滚的?

一个基本的事务模型:

对应spring中实现事务:

 

 具体:

7.Spring事务什么时候会失效?

Spring如何管理 多数据源 事务?

 Spring事务专题之五、Spring如何管理多数据源事务? - china_coding - 博客园 (cnblogs.com)

谈一下Spring事务的传播?

8.spring支持的bean作用域有哪些?

 9.什么是Java中的依赖对象?

        在面向对象编程中,我们经常处理处理的问题就是解耦,程序的耦合性越低表明这个程序的可读性以及可维护性越高。控制反转(Inversion of Control或IoC)就是常用的面向对象编程的设计原则,使用这个原则我们可以降低耦合性。其中依赖注入是控制反转最常用的实现。

什么是依赖?

依赖是程序中常见的现象,比如类Car中用到了GasEnergy类的实例energy,通常的做法就是在Car类中显式地创建GasEnergy类的实例,并赋值给energy。

存在问题

类Car承担了多余的责任,负责energy对象的创建,这必然存在了严重的耦合性。举一个现实中的例子,一辆汽车使用哪种能源不是由汽车来决定,而是由汽车制造商(CarMaker)来决定,这是汽车制造商的责任。

可扩展性,假设我们想修改能源为电动力,那么我们必然要修改Car这个类,明显不符合开放闭合原则。

依赖注入,spring就是依赖注入框架

依赖注入是这样的一种行为,在类Car中不主动创建GasEnergy的对象,而是通过外部传入GasEnergy对象形式来设置依赖。 常用的依赖注入有如下三种方式

1.构造器注入

将需要的依赖作为构造方法的参数传递完成依赖注入。

2.Setter方法注入

增加setter方法,参数为需要注入的依赖亦可完成依赖注入。

3.接口注入

接口注入,闻其名不言而喻,就是为依赖注入创建一套接口,依赖作为参数传入,通过调用统一的接口完成对具体实现的依赖注入。

接口注入和setter方法注入类似,不同的是接口注入使用了统一的方法来完成注入,而setter方法注入的方法名称相对比较随意。

依赖查找

依赖查找和依赖注入一样属于控制反转原则的具体实现,不同于依赖注入的被动接受,依赖查找这是主动请求,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。

10.spring中的bean生命周期? 

纸质面经中有。

11.如何实现一个IOC容器?

 12.什么是嵌入式服务器,为什么使用嵌入式服务器?

13.说一下spring的优势?

 14.说说你对AOP的理解?

15.谈谈Spring IOC的理解,原理与实现?

16.谈一下Spring IOC的底层实现? 

17.描述一下bean的生命周期?

 18.spring是如何解决循环依赖的问题?

A,B在实例化,初始化--填充属性的时候,会出现的问题,以及进行的流程。


对于一个bean对象而言,如果一级缓存中存在,则二级缓存自动销毁,反之亦然。

19.缓存的放置时间和删除时间?

20.Bean Factory 与 FactoryBean有什么区别?

其中,FactoryBean接口中 有 下边的三个方法。 

21.Spring的AOP的底层实现原理?

22.Spring加载注解和配置文件概述?

spring容器要加载 指定的bean对象,根据xml或者 注解来加载对象,整个流程如下:

 最终生成一个 BeanDefinition 类的 bean。

使用反射来创建 bean对象,反射的基本逻辑在黄色框图 中。反射是不存在的,具体的是下边的BeanFactory来实现的。

 

23.循环依赖问题的总结: 

三级缓存具体存放的对象:

 

24.动态代理和静态代理:

静态代理对于代理的角色是固定的,如dao层有20个dao类,如果要对方法的访问权限进行代理,此时需要创建20个静态代理角色,引起类爆炸,无法满足生产上的需要,于是就催生了动态代理的思想。

某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。

静态代理的特点

1、目标角色固定

2、在应用程序执行前就得到目标角色

3、代理对象会增强目标对象的行为

4、有可能存在多个代理 引起"类爆炸"(缺点)

动态代理:

相比于静态代理,动态代理在创建代理对象上更加的灵活,动态代理类的字节码在程序运行时,由Java反射机制动态产生。它会根据需要,通过反射机制在程序运行期,动态的为目标对象创建代理对象,无需程序员手动编写它的源代码。动态代理不仅简化了编程工作,而且提高了软件系统的可扩展性,因为反射机制可以生成任意类型的动态代理类。代理的行为可以代理多个方法即满足生产需要的同时又达到代码通用的目的

动态代理的两种实现方式:

1. JDK 动态代理

2. CGLIB动态代理

动态代理的特点

  1. 目标对象不固定
  2. 在应用程序执行时动态创建目标对象
  3. 代理对象会增强目标对象的行为
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光、相遇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值