Spring常见面试题

一、Bean的安全问题

spring中单例bean的线程是否安全

这取决于Bean的内部状态,就是看bean有没有可以改变的成员变量,如果有可以改变的成员变量,那么在并发的情况下就可能会改变成员变量,这样线程就不安全,而如果没有的话就不会发生,所有就是线程安全的。

如果bean会有线程安全的问题,那么可以在类的加@Scope("prototype")注解,这样每次请求都会创建一个新的Bean实例,从而避免线程安全问题。

二、AOP(面向切面编程)

抽取那些与业务不太相关或者是通用的,要在多个模块里使用到的通用功能的代码(抽取的这些代码叫做通知),再根据需要统一或者单独地向目标方法里添加抽取的这些功能。(比如记录操作日志,更新数据库里的修改时间,事务的实现(方法执行前开启事务,执行完根据情况看是否回滚))

AOP中的相关的名称

三、Bean的生命周期

Spring 容器在进行实例化时会将 XML 配置中的 <bean> 信息封装成一个 BeanDefinition 对象。这个对象包含多个属性来描述 Bean。具体内容如下:

BeanDefinition 相关信息

  1. beanClassName: Bean 的类名。
  2. initMethodName: 初始化方法名称。
  3. propertyValues: Bean 的属性值。
  4. scope: Bean 的作用域。
  5. lazyInit: 是否延迟初始化。

BeanDefinition 中的方法

  • getBeanClassName()
  • getInitMethodName()
  • getPropertyValues()
  • getScope()

  1. 实例化(Instantiation):Spring容器通过构造函数创建Bean的实例。

  2. 填充属性(Populate Properties):Spring容器根据配置或注解,将依赖注入到Bean中。这包括通过setter方法或字段注入依赖

  3. 实现Aware接口

    1. BeanNameAware:如果Bean实现了BeanNameAware接口,Spring会调用setBeanName方法,将Bean的名称传递给它。

    2. BeanFactoryAware:如果Bean实现了BeanFactoryAware接口,Spring会调用setBeanFactory方法,将BeanFactory实例传递给它。

    3. ApplicationContextAware:如果Bean实现了ApplicationContextAware接口,Spring会调用setApplicationContext方法,将ApplicationContext实例传递给它。

  4. BeanPostProcessor#before:在Bean初始化之前,任何实现了BeanPostProcessor接口的类都会调用postProcessBeforeInitialization方法。

  5. 初始化(Initialization):</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值