2022最新面试题整理大全64道spring面试题让你全吃透《Spring篇(二)》

9 篇文章 1 订阅
7 篇文章 1 订阅

大家好这里是小码哥,今天主要介绍的是spring面试题的第二篇

Spring框架是我们都需要学习的思想理念,尤其是源码,都是程序员的精华所在,设计模式等。。。。

在企业中也是经常会提问到的相信大家深有体会,小码哥最近整理了java后端程序员从0-1的全部面试题,《祝大家看完面试顺利》关注我们持续更新
《想要更快拿到资源的请在公众号回复:码出八股文_斩出offer线》获取全套 末尾有惊喜

16、Spring 支持几种 bean 的作用域?

当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例 prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例 request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效 session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效 globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

17、spring bean 容器的生命周期是什么样的?

spring bean 容器的生命周期流程如下:

1、Spring 容器根据配置中的 bean 定义中实例化 bean。

2、Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

3、如果 bean 实现BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用setBeanName()。

4、如 果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。

5、如果存在与 bean 关联的任何BeanPostProcessors,则调用 preProcessBeforeInitialization() 方 法。

6、如果为 bean 指定了 init 方法( 的 init-method 属性),那么将调用它。

7、最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization()方法。

8、如果 bean 实现DisposableBean 接口,当 spring 容器关闭 时,会调用 destory()。

9、如果为bean 指定了 destroy 方法( 的 destroy-method 属性),那么将调用它。

18、什么是 spring 的内部 bean?

只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。为了定义 bean, Spring

的基于 XML 的配置元数据在 或 中提供了 元素的使用。内部 bean 总是匿名的,它们总是作为 原型。

例如,假设我们有一个 Student 类,其中引用了 Person 类。

这里我们将只创建一个 Person 类实 例并 在 Student 中使用它。

模块一

Student.java

public class Student {

private Person person;

//Setters and Getters

}
模块二
public class Person {

private String name;

private String address;

//Setters and Getters
}

模块三

<bean id="StudentBean" class="com.edureka.Student">
	<property name="person">
    	<!--This is inner bean -->
		<bean class="com.edureka.Person">
			<property name="name" value="Scott"></property>
			<property name="address" value="Bangalore"></property>
		</bean> 
	</property>
</bean>

19、什么是 spring 装配

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。Spring

容器需要知道需要什 么

bean 以及容器应该如何使用依赖注入来将 bean 绑定在一起,同时装配 bean。

20、自动装配有哪些方式?

Spring 容器能够自动装配 bean。也就是说,可以通过检查 BeanFactory 的内容让 Spring 自动解析 bean

的协作者。

自动装配的不同模式:

no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。
byName - 它根据 bean 的 名称注入对象依赖项。
它匹配并装配其属性与 XML文件中由相同名称定义的 bean。

byType - 它根据类型注入对象依赖项。
如果属性的类型 与XML 文件中的一个 bean 名称匹配,则匹配并装配属性。

构造函数- 它通过调用类的构造函数来注入依赖项。它有大量的参数。

autodetect - 首先容器尝试通过构造函数使
用 autowire 装配,如果不能,则尝试通过 byType 自动装配

21、自动装配有什么局限?

覆盖的可能性 - 您始终可以使用 和 设置指定依赖项,这将覆盖自动装配。

基本元数据类型 - 简单属性 (如原数据类型,字符串和类)无法自动装配。

令人困惑的性质 - 总是喜欢使用明确的装配,因为自动装配不太精确。

22、什么是基于注解的容器配置

不使用 XML 来描述 bean 装配,开发人员通过在相关的类,方法或字段声明上使用注解将配置移 动到

组件类本身。它可以作为 XML 设置的替代方案。

例如:

Spring 的 Java 配置是通过使用 @Bean和@Confifiguration 来实现。

@Bean 注解扮演与 元素相同的角色。
@Confifiguration 类允许通过简单地调用同一个类中的其他 @Bean 方法来定义 bean 间依赖关系。
例如:

<a href="/profile/5797812" data-card-uid="5797812" class="js-nc-card" target="_blank">
@Configuration public class StudentConfig {
	@Bean
	public StudentBean myStudent() {
		return new StudentBean();
	} 
}</a>

23、如何在 spring 中启动注解装配?

默认情况下,Spring 容器中未打开注解装配。

因此,要使用基于注解装配,我们必须通过配置<context:annotation-confifig/> 元素在spring 配置文件中启用它。

24、@Component, @Controller,@Repository,@Service 有何区别?

@Component :这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件 扫描
机制现在可以将其拾取并将其拉入应用程序环境中。
@Controller :这将一个类标记为 Spring Web MVC 控制器。标有它的Bean 会自动导入到 IoC 容器 中。https://zhuanlan.zhihu.com/profile/664319079
@Repository :这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外 的好
处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。
@Service :此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服 务层
类中使用@Service 而不是@Component,因为它以更好的方式指定了意图。

25、@Required 注解有什么用?

@Required 应用于 bean 属性 setter 方法。

此注解仅指示必须在配置时使用bean 定义中的显式属性值或使用自动装配填充受影响的 bean属性。

如果尚未填充受影响的 bean 属性,则容器将抛出eanInitializationException。

示例:

public class Employee {
    private String name;
     
    @Required
    public void setName(String name){
        this.name=name; 
    }
 
public string
    getName(){ 
        return name; 
    }
}

26、@Autowired 注解有什么用?

@Autowired 可以更准确地控制应该在何处以及如何进行自动装配。此注解用于在 setter 方法,构 造函

数,具有任意名称或多个参数的属性或方法上自动装配bean。

默认情况下,它是类型驱动的注 入。

public class Employee {
 
private String name;
 
    @Autowired
    public void setName(String name) {
        this.name=name; 
    }
public string
    getName(){ 
        return name; 
    }
}

27、@Qualififier 注解有什么用?

当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualififier 注解

和 @Autowired 通过指定应该装配哪个确切的 bean来消除歧义。

例如:

这里我们分别有两个类,Employee 和 EmpAccount。

在 EmpAccount中,使用@Qualififier 指定了必须装配 id 为 emp1 的 bean。

Employee.java
 
public class Employee {
 
    private String name;
    @Autowired
    public void setName(String name) {
        this.name=name; 
    }
 
        public string getName(){ 
        return name; 
    } 
}

EmpAccount.java
 
public class EmpAccount {
private Employee emp;
 
@Autowired
@Qualifier(emp1)
public void showName() {
System.out.println(“Employee name : ”+emp.getName);
    } 
}

28、@RequestMapping 注解有什么用?

@RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的控制器中的特定类/ 方法 。

此注释可应用于两个级别:

类级别:映射请求的 URL
方法级别:映射 URL 以及 HTTP 请求方法

29、spring DAO 有什么用?

Spring DAO 使得 JDBC,Hibernate 或 JDO 这样的数据访问技术更容易以一种统一的方式工作。

这使得用户容易在持久性技术之间切换。

它还允许您在编写代码时,无需考虑捕获每种技术不同的异常。

30、举例Spring DAO抛出的异常

在这里插入图片描述

想要了解更多请微信关注公众号:《码出宇宙》或者关注我们牛客平台《让你再学习面试的路上一路顺风》

https://www.nowcoder.com/discuss/964313

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值