【八股】Spring 基础知识点

一、Bean 的作用域有哪些?

单例singleton、原型prototype、请求request、会话session、全局会话global-session

需要注意的是,只有作用域为 Singleton 的 Bean 由 Spring IOC容器负责管理和维护,而其他作用域的 Bean 需要在适当的时候手动管理其创建和销毁

二、单例 Bean 的线程安全问题及解决方案?

先了解一下线程安全中有状态、无状态两个概念:1、有状态,就是有数据存储功能并且可读写,线程安全的问题都是由全局变量及静态变量引起的,我们假设每个线程中对全局变量或者静态变量都只可读,那么也就不会存在线程安全问题了;2、无状态,就是不保存数据不存在数据读写问题,当然也就不存在线程安全问题;

解决方案:1、更换 Bean 的作用域为原型模式 @scope("prototype");2、使用 ThreadLocal

三、介绍下 Bean 的生命周期?

实例化、属性赋值、初始化、销毁

整个生命周期相关的方法可以分为三大类:Bean自身的方法、容器级生命周期方法、Bean级生命周期方法;

四、什么是 BeanFactory?和 FactoryBean 的区别?
  • BeanFactory是一个接口,位于类结构树的顶端,定义了getBean()、containsBean()等管理Bean的通用方法,Spring中有很多BeanFactory的实现类,以此来增强BeanFactory的功能;
  • FactoryBean是一个Bean,但不仅仅是一个Bean;它是一个能生产和修饰对象生成的工厂Bean,类似于设计模式中的工厂模式和装饰器模式;它能在需要的时候生产一个对象,返回任何Bean的实例;
五、BeanFactory 和 ApplicationContext 有什么作用?两者之间的区别是什么?
  • ApplicationContext 继承自 BeanFactory ,包含 BeanFactory 的所有功能,面向使用 Spring 框架的开发者,几乎所有的应用场合都可以直接使用 ApplicationContext 而非底层的 BeanFactory;

如果说 BeanFactory 是 Spring 的 “心脏”,那么ApplicationContext就是完整的“身躯”了。ApplicationContext 由 BeanFactory 派生而来,提供了更多面向实际应用的功能。在 BeanFactory 中,很多功能需要以编程的方式实现,而在 ApplicationContext 中则可以通过配置的方式实现

我们一般称 BeanFactory 为 IoC 容器,而称 ApplicationContext 为应用上下文。但有时为了行文方便,我们也将 ApplicationContext 称为 Spring 容器。

六、有几种依赖注入方式?

构造函数注入、setter注入、属性注入

七、注入 Bean 的注解有哪些?@Autowired 和 @Resource 的区别是什么?

Spring 内置的 @Autowired 以及 JDK 内置的 @Resource@Inject 都可以用于注入 Bean。

  • @Autowired 是Spring内置的注解,在注入Bean时,它默认通过byType注入(优先根据接口类型),如果该接口存在多个实现类,则通过byName注入(根据属性名),但是这里需要注意,建议通过 结合@Qualifier 注解来显示指定名称而不是依赖变量的名称。

  • @Resource 时JDK内置的注解,与@Autowired刚好相反,它的默认注入方式是byName,如果无法通过名称匹配到对应的Bean注入方式会变为byType。

@Resource 有两个比较重要且日常开发常用的属性:name(名称)、type(类型)。如果仅指定 name 属性则注入方式为 byName,如果仅指定 type 属性则注入方式为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值