史上最全Spring相关面试题(四)

点击上方 "JAVA开发大本营"关注, 置顶或星标一起学习

每天晚上10点00分, 我们不见不散

导读

小编将每天整理10道经典,系统化的面试题,让你进行学习。

每天鸡汤

至乐莫如读书,至要莫如教子

责任编辑:涛哥

史上最全Spring相关面试题(一)

史上最全Spring相关面试题(二)

史上最全Spring相关面试题(三)

三十一、什么是bean装配?

参考回答:

bean 装配是指在Spring 容器中把bean组装到一起,前提是容器需要知道bean的依赖关系,如何通过依赖注入来把它们装配到一起。

三十二、什么是bean的自动装配?

 

参考回答:

Spring 容器能够自动装配相互合作的bean,这意味着容器不需要<constructor-arg>和<property>配置,能通过Bean工厂自动处理bean之间的协作。

三十三、解释不同方式的自动装配 ?

参考回答:

有五种自动装配的方式,可以用来指导Spring容器用自动装配方式来进行依赖注入。

(1)no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。

2)byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。

(3)byType:通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出错误。

(4)constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。

(5)autodetect:首先尝试使用constructor来自动装配,如果无法工作,则使用byType方式。

三十四、自动装配有哪些局限性 ?

参考回答:

自动装配的局限性是:

(1)重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。

(2)基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串和类。

(3)模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

三十五、你可以在Spring中注入一个null 和一个空字符串吗?

参考回答:

 可以,在Spring中注入一个null 和一个空字符串是没问题的。

三十六、什么是基于Java的Spring注解配置? 给一些注解的例子

参考回答:

基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。

举例:

(1@Configuration:它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。

2)@Bean:它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。

三十七、什么是基于注解的容器配置?

参考回答:

 

相对于XML文件,注解型的配置依赖于通过字节码元数据装配组件,而非<>的声明。

开发者通过在相应的类,方法或属性上使用注解的方式,直接组件类中进行配置,而不是使用xml表述bean的装配关系。

 

三十八、怎样开启注解装配?

参考回答:

注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 <context:annotation-config/>元素。

三十九、讲几个spring重要的注解

参考回答:

(1)@Required :这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。

(2)@Autowired :@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。

(3)@Qualifier :当有多个相同类型的bean却只有一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的bean。

四十、@Autowired 与@Resource的区别?

参考回答:

(1)@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

(2)@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用。

Java代码如下:

@Autowired() @Qualifier
("baseDao")


private BaseDao baseDao;


@Autowired() @Qualifier
("baseDao") private BaseDao baseDao;

3、@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

Java代码代码如下:

@Resource(name="baseDao")


private BaseDao baseDao;


@Resource(name="baseDao") private BaseDao baseDao;

推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

扫码关注最新动态

关键时刻,第一时间送达

- END -

点个在看是最大的支持 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

carl的分享笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值