【精选】64道题拿下Spring(第二篇)

上一篇

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 间依赖关系。

例如:
@Configuration public class StudentConfig {
	@Bean
	public StudentBean myStudent() {
		return new StudentBean();
	} 
}

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

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

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

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

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抛出的异常

下一篇

#面试复盘##春招##秋招##面经##笔记#
小码哥高频面经及八股文 文章被收录于专栏

宝剑锋从磨砺出,梅花香自苦寒来,我是小码哥为你圆梦大厂少走弯路,值得关注。

全部评论
感觉spring不好学啊
点赞 回复 分享
发布于 2022-06-04 23:26
点赞 回复 分享
发布于 2022-06-09 14:21
学到了学到了
点赞 回复 分享
发布于 2022-06-09 15:04

相关推荐

戏子多秋m:项目做了有,但是没奖项,没实习,学校可能没有太大优势,建议项目写三个就可以了,技能点可能得优化下,个人感觉,我也是菜鸡,不是很懂,单纯个人建议,感觉秋招还在捞双非,加油兄弟
点赞 评论 收藏
分享
评论
8
23
分享

创作者周榜

更多
牛客网
牛客企业服务