面试题学习(二)Spring

Spring中Bean的作用域之间有什么区别?

类别说明
singletonBean以单例的方式存在
prototype每次调用getBean()的时候都会返回一个新的实例
request每次HTTP请求都会创建一个新的Bean,该作用域适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean.该作用域适用于WebApplicationContext环境

可以通过scope属性来指定作用域

事务的传播行为

现在假设有两个方法,update()和add(),

public void update(){}
public void add(){ 
   update();
}

(重点,默认)1.REQUIRED (如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行)
如果add本身有事务,调用update后,update使用当前事务
如果add本身没有事务,调用update后,创建新事务

(重点)2.REQUIRED_NEW(当前的方法必须启动新事务,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起)
使用add方法调用update后,无论add是否有事务,都会创建新的事务

3.SUPPORTS (如果有事务在运行,当前方法就这这个事务内运行,否则它可以不运行这事务中)

4.NOT_SUPPORTED(当前方法不应该运行在事务中,如果有事务,它将挂起)

5.MANDATORY(当前方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常)

6.NEVER(当前方法不运行在事务内部,如果有正在运行的事务,就抛出异常)

7.NESTED(如果有事务在运行,当前方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行)

事务隔离级别

有三个读问题:脏读,不可重复读,幻读
1.脏读: 一个 未提交 事务读到另一个 未提交 事务的数据
2.不可重复读: 一个 未提交 事务读到另一个 提交 事务 修改的 数据
3.幻读: 一个 未提交 事务读到另一个 提交 事务的 添加的 数据

为了解决读的问题,就有了4个隔离级别

1.READ UNCOMMITTED(读未提交) : 3个问题都没解决
2.READ COMMITTED(读已提交) :解决脏读
3.REREATABLE READ(可重复读) :解决脏读,不可重复读 ,mysql默认级别
4.SERIALIZABLE(序列化/串行化) : 都解决

spring bean的生命周期

实例化-》注入属性-》Aware相关接口-》前置处理-》初始化-》后置处理-》使用-》销毁
基本上默认只用到了 实例化-》注入属性-》使用

Spring对bean进行实例化;

Spring将值和bean的引用注入到bean对应的属性中;

如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;

如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;

如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;

如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法;

如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用initMethod声明了初始化方法,该方法也会被调用;

如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()方法;

此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;

如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销 毁方法,该方法也会被调用。 现在你已经了解了如何创建和加载一个Spring容器。但是一个空的容器并没有太大的价值,在你把东西放进去之前,它里面什么都没有。为了 从Spring的DI中受益,我们必须将应用对象装配进Spring容器中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值