Spring面试题大全

Spring面试题大全


目录

文档索引

面试题汇总

Q:Bean的生命周期?

Q:Bean如何进行定义和注册?

Q:Bean如何进行实例化?

Q:Bean如何进行依赖注入?

Q:循环依赖是什么?Spring如何解决循环依赖


文档索引

官方文档:Spring Framework Documentation


面试题汇总

Q:Bean的生命周期?

A:

Bean的生命周期主要有四步,注册Bean,实例化Bean,初始化Bean,销毁Bean

一、注册Bean

  • 根据定义的Bean,生成BeanDefinition并放入BeanDefinitionMap中

二、实例化Bean

  • 调用BeanFactoryPostProcessors,常见的PropertySourcesPlaceholderConfigurer用于解析配置
  • 调用InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation,生成bean后返回,常见的AbstractAutoProxyCreator,用于返回代理类
  • 实例化bean
  • 调用MergedBeanDefinitionPostProcessor,常见的CommonAnnotationBeanPostProcessor,AutowiredAnnotationBeanPostProcessor用于对注解扫描注册
  • 调用InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation bean实例化后的后置修饰

三、初始化Bean

  • 调用InstantiationAwareBeanPostProcessor的postProcessPropertyValues对属性进行设置
  • BeanNameAware、BeanClassLoaderAware、BeanFactoryAware用于暴露容器
  • 调用postProcessBeforeInitialization对bean进行设置后返回
  • 继承InitializingBean,执行afterPropertiesSet方法
  • 调用init方法
  • 调用postProcessAfterInitialization
  • 所有bean初始化完后,调用SmartInitializingSingleton的afterSingletonsInstantiated方法

四、销毁Bean

  • DiposibleBean的destroy方法
  • bean的destroy-method方法

Q:Bean如何进行定义和注册?

A:

Bean可以在XML或Java文件中进行定义注册

  • ClassPathXmlApplicationContext扫描xml下的<bean>
  • ClassPathXmlApplicationContext通过xml的context:component-scan或@ComponentScan扫描被@Controller、@Service、@Repository、@Component注解的类
  • 利用AnnotationConfigApplicationContext扫描@Configuration下的@Bean
  • 通过@Import引入ImportBeanDefinitionRegistrar实现
  • 通过refresh,利用context的registerBeanDefinition方法
  • 利用context的registerBean方法定义Supplier接口

Q:Bean如何进行实例化?

A:

通过以下四种方法,可以对Bean进行实例化

  • 构造方法
  • 静态工厂
  • 实例工厂
  • instanceSupplier方法进行实例化

Q:Bean如何进行依赖注入?

A:

XML

  • 构造方法:不可变、不产生npe问题
  • setter注入:定制化
  • autowire属性注入:byName、byType、constructor,不需要填写bean之间的依赖,自动装配

注解

  • @Autowired注解在set方法上,使用byType,如有多个,则根据参数byName
  • @Autowired注解在构造方法上,使用改constructor,如果只有一个,或有默认构造,则没有注解的情况,直接使用该构造
  • @Autowired注解在字段上,默认以byType方式去匹配,如果没找到,以byName方式去查找
  • @Resource:默认以byName方式去匹配,没找到则以byType方式招到,如果有多个,使用@Qualifier直接指定

Q:循环依赖是什么?Spring如何解决循环依赖?

A:解决方案:Spring循环依赖问题解决方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值