SpringBoot面试精选(二)

前言

日更SpringBoot相关面试题,每日两题

问题①:

问题描述

@Autowired@Resource的区别是什么?

问题难度及重要程度

这是一个相对间的问题,@Resource@Autowired都是在做bean的注入时使用的注解,我们平时在代码中也用的很多,但是跟多人都不明白二者有什么区别之处

答案

相同点:

两者都是可以放在字段和setter方法上的。两者如果放在字段上,那么就不需要写setter方法

不同点:

@Autowired

@Autowired是Spring提供的注解,需要导入org.springframework.beans.factory.annotation.Autowired;只按照byType注入

默认情况下使用@Autowired导入的依赖对象必须是存在的,如果允许null值,可以设置他的required属性为false。如果我们想要使用@Autowired注解按照byName的方式来装配,可以结合@Qualifier注解一起使用

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}
@Resource

@Resource注解装配默认方式是ByName的方式自动注入,由J2EE提供,需要导入javax.annotation.Resource。

@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名称,而type属性解析为bean的类型。所以使用name属性,则使用byName的方式装配,使用type属性则会通过byType的方式装配。如果都不使用,则会通过反射机制使用byName的自动注入策略

综上所述,@Resource的作用其实是和@Autowired一样的,只是@AutoWired注解是由Spring提供的,而@Resource注解是由J2EE提供的,两者的作用都是自动装配bean,只是装配的方式又有所区别,@Autowired默认通过按照类型的方式进行自动装配bean,而@Resource既可以通过名称装配也可以通过类型装配(默认是通过byName的方式装配)。

问题②

问题描述

Spring中的Bean的生命周期

问题难度及重要程度

比较简单基础的一个问题,被询问几率较大

答案

1、实例化

当容器实例化一个bean时,spring会调用bean的一个构造方法来创建一个实例

2、属性设置

当bean被实例化后,spring会通过依赖注入(DI)的方式来设置bean的属性;spring还会通过xml配置文件、注解、java配置类来对bean进行管理

3、初始化

当所有的属性都被设置完后,spring会调用初始化方法来对bean进行特定的初始化操作,这个初始化需要通过xml配置文件、注解、java配置类来指定

4、使用

当bean初始化完成后就可以在程序中进行使用了

5、销毁

当容器关闭时,spring会调用销毁方法将bean销毁

在bean的生命周期中前面三个过程比较重要,如果实例化失败,则不会发生后续操作;同理,如果一个bean的属性设置出现错误,则不会进行初始化操作。因此,在实际开发中一定要注意bean的生命周期,确保bean的生命周期是按照正常的顺序进行的,否则会出现潜在的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深藏bulu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值