BATJ 互联网公司必问知识点:Spring 十个面试专题及答案 (1)
在 Java 中依然注入有以下三种实现方式:
构造器注入
Setter 方法注入
接口注入
二、请解释下 Spring 框架中的 IoC?
Spring 中的 org.springframework.beans
包和 org.springframework.context
包构成了 Spring 框架 IoC 容器的基础。
BeanFactory
接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。
ApplicationContex
接口对 BeanFactory
(是一个子接口)进行了扩展,在 BeanFactory
的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource
的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的 WebApplicationContext
。
org.springframework.beans.factory.BeanFactory
是 Spring IoC 容器的具体实现,用来包装和管理前面提到的各种 bean。BeanFactory
接口是 Spring IoC 容器的核心接口。
IOC
:把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转。
三、BeanFactory 和 ApplicationContext 有什么区别?
BeanFactory
可以理解为含有 bean 集合的工厂类。BeanFactory
包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。
BeanFactory
还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory
还包含 了 bean 生命周期的控制,调用客户端的初始化方法(initialization methods
)和销毁方法(destruction methods
)。
从表面上看,application context
如同 bean factory
一样具有 bean 定义、bean 关联关系的设置,根据请求分发 bean 的功能。但 applicationcontext
在此基础上还提供了其他的功能。
提供了支持国际化的文本消息
统一的资源文件读取方式
已在监听器中注册的 bean 的事件
以下是三种较常见的 ApplicationContext
实现方式:
ClassPathXmlApplicationContext
:从classpath
的 XML 配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中
ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);
FileSystemXmlApplicationContext
:由文件系统中的 XML 配置文件读取上下文。
ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);
XmlWebApplicationContext
:由 Web 应用的 XML 文件读取上下文。AnnotationConfigApplicationContext
(基于 Java 配置启动容器)
本文仅供参考!文章内容节选自《Spring 面试专题及答案》需要的同学记得私信我免费获取!
四、Spring 有几种配置方式?
将 Spring 配置到应用开发中有以下三种方式:
基于 XML 的配置
基于注解的配置
基于 Java 的配置
五、请解释 Spring Bean 的生命周期?
Spring Bean
的生命周期简单易懂。在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不在被调用时需要进行相关的析构操作,并从 bean 容器中移除。
Spring bean factory
负责管理在 spring 容器中被创建的 bean 的生命周期。Bean 的生命周期由两组回调(call back)方法组成。
初始化之后调用的回调方法。
销毁之前调用的回调方法。
Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:
InitializingBean
和DisposableBean
回调接口针对特殊行为的其他
Aware
接口Bean 配置文件中的
Custom init()
方法和destroy()
方法@PostConstruct
和@PreDestroy
注解方式
使用 customInit()
和 customDestroy()
方法管理 bean 生命周期的代码样例如下:
<beans><bean id="demoBean" class="com.somnus.task.DemoBean" initmethod="customInit" destroy-method="customDestroy"></bean></beans>
六、什么是 Spring inner beans?
在 Spring 框架中,无论何时 bean 被使用时,当仅被调用了一个属性。一个明智的做法是将这个 bean 声明为内部 bean。内部 bean 可以用 setter 注入“属性”和构造方法注入“构造参数”的方式来实现。
比如,在我们的应用程序中,一个 Customer 类引用了一个 Person 类,我们的要做的是创建一个 Person 的实例,然后在 Customer 内部使用。
public class Customer{private Person person;//Setters and Getters}
public class Person{private String name;private String address;private int age;//Setters and Getters}
内部 bean 的声明方式如下:
七、请举例说明如何在 Spring 中注入一个 Java Collection?
Spring 提供了以下四种集合类的配置元素:
<list> : 该标签用来装配可重复的 list 值。
<set> : 该标签用来装配没有重复的 set 值。
<map>: 该标签可用来注入键和值可以为任何类型的键值对。
<props> : 该标签支持注入键和值都是字符串类型的键值对。
下面看一下具体的例子:
<be
评论