Spring常见面试题之Spring IoC

Spring IoC

1、对于Spring IoC的理解?

IoC控制反转,是一种设计思想,而不是一种具体的技术实现。IoC的思想是将原本在程序中手动创建对象的控制权,交给Spring框架来管理。

控制:对象创建的权力

反转:控制权交给外部环境(Spring框架,IoC容器)

2、什么是Spring Bean?

简单而言,Bean就代指那些被IoC所管理的对象。

3、将一个类声明为 Bean 的注解有哪些?

@Component:通用注解,可将任意类标注为Spring组件。

@Repository:对应持久层,即dao层,主要用于数据库相关操作。

@Service:对应服务层。主要涉及一些复杂的逻辑,需要用到dao层。

@Controller:对应于Spring MVC控制层,主要用于接受用户请求并调用Service层返回数据给前端页面。

4、 @Component、@Bean有什么区别?

  • @Component注解用于类,@Bean注解用于方法
  • @Component通过路径扫描来自动装配到Spring的bean容器中。@Bean注解用于在标有注解的方法中定义产生这个bean。
  • @Bean的自定义性更强

5、注入Bean的注解有哪些?

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

@Autowired和@Resource使用更多。

6、@Autowired 和 @Resource 的区别是什么?

  • Autowired是Spring提供的注解,Resource是JDK提供的注解。
  • Autowired默认根据类型匹配,Resource默认根据名称进行匹配。
  • 当一个接口存在多个实现类时,两者都需要通过名称匹配对应的Bean。Autowired可以通过@Qualifier 注解来显式指定名称,Resource可以通过name属性来显式指定名称。
  • Autowired支持在构造函数、方法、字段和参数上使用,Resource主要 用于字段和方法上的注入,不支持在构造函数或参数上使用。

7、Bean的作用域有哪些?

  • singleton:IoC容器中只有唯一的bean实例。Spring中的bean默认单例。

  • prototype:每次获取都会创建一个新的bean实例。

  • request(仅Web应用可用):每次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。

  • session(仅Web应用可用):每次来自 新session的HTTP请求都会产生一个新的bean,仅在当前应用启动时间内有效。

  • websocket(仅Web应用可用):每次websocket会话产生一个新的bean。

    使用注解@Scope或xml文件的scope属性配置作用域

8、Bean是线程安全的吗?

主要取决于其作用域和状态。prototype每次产生新的bean实例,不存在线程安全问题。singleton可能会存在资源竞争问题,主要取决于bean是否有状态(有状态bean是指包含可变的成员变量的对象),如果有状态就存在线程安全问题。

对于有状态的线程安全问题,常用的两种解决办法:

  • 在Bena中尽量避免定义可变的成员变量
  • 在类中定义ThreadLocal成员变量,使用TreadLocal保存可变的成员变量

9、Bean的生命周期?

阶段一:Bean的实例化和依赖注入:根据bean的定义 和一些信息配置来实例化bean

阶段二:检查Spring Awareness,如果Bean实现了*.Aware接口 ,就调用相应的set方法

阶段三:创建bean生命周期回调

阶段四:销毁bean生命周期回调:如果实现了销毁的接口,就会将bean销毁

整理自JavaGuide

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值