Spring面试问题和答案

转载:https://blog.csdn.net/sxdtzhaoxinguo/article/details/80504839

1.Spring框架是什么?

Spring框架是一个开放源码框架,用于解决企业应用程序开发的复杂性。Spring框架的主要优势之一是它的分层架构,它允许您对所使用的组件进行选择。Spring的主要模块是Spring核心、Spring AOP和Spring MVC。

2.Spring框架的主要特性是什么?
轻量级:

在规模和透明度方面,spring是轻量级的。spring框架的基本版本大约是1 MB。处理开销也可以忽略不计.

控制反转 (IOC):
依赖注入或控制反转的基本概念是,程序员不需要创建对象,而是描述如何创建对象.

面向方面(AOP):
Spring支持面向方面的编程。
面向方面的编程是指将次要或支持功能与主程序的业务逻辑隔离的编程范例。AOP是一种很有前途的技术,用于分离横切关注点,这在面向对象编程中通常很难做到。应用程序的模块化以这种方式增加,并且它的维护变得更加容易。

容器:
Spring包含并管理应用程序对象的生命周期和配置。

MVC框架:
Spring提供了基于核心Spring功能的MVC web应用程序框架。这个框架可以通过策略接口进行高度的可配置,并且可以容纳多个视图技术,如JSP、Velocity、tile、iText和POI。

事务管理:
Spring框架为事务管理提供了一个通用的抽象层。这使得开发人员可以添加可插拔的事务管理器,并且可以轻松地在不处理底层问题的情况下事务。

JDBC的异常处理:

Spring的JDBC抽象层提供了一个有意义的异常层次结构,它简化了错误处理策略。与Hibernate、JDO和iBATIS的集成:Spring提供了与Hibernate、JDO和iBATIS的最佳集成服务。

3.解释Spring的主要模块?
Spring AOP:

Spring的关键组件之一是AOP框架。AOP在Spring中使用:
提供声明性的企业服务,特别是作为EJB声明式服务的替代品。最重要的服务是声明式事务管理,它建立在Spring的事务抽象之上。
允许用户实现自定义的切面,补充他们使用AOP的OOP的使用。

Spring ORM:
ORM包与数据库访问有关。它为流行的对象关系映射api提供集成层,包括JDO、Hibernate和iBatis。

Spring Web:
Spring Web模块是Spring的一部分?s web应用程序开发堆栈,其中包括Spring MVC。

Spring DAO:
Spring的DAO(Data Access Object)支持主要用于使用JDBC、Hibernate或JDO等技术标准化数据访问工作。

Spring Context:
此包构建在bean包之上,以增加对消息源的支持和观察者的设计模式支持,以及应用程序对象使用一致的API获得资源的能力。

Spring Web MVC:
这是为web应用程序提供MVC实现的模块。

Spring Core:
核心包是Spring框架中最重要的组件。

该组件提供依赖性注入特性。BeanFactory提供了一种工厂模式,它将诸如初始化、创造和访问对象与实际程序逻辑的访问分离开来。

4. 什么是Spring的依赖注入(IOC)?
依赖注入的基本概念(也称为控制模式反转)是指您不创建对象,而是描述如何创建对象。您不会将组件和服务直接连接到代码中,而是描述配置文件中哪些组件需要哪些服务。一个容器(在Spring框架的情况下,IOC容器)负责将其连接起来。

即。在应用IoC时,对象在创建时被一些外部实体赋予它们依赖关系,这些实体负责协调系统中的每个对象。也就是说,依赖项被注入到对象中。因此,IoC意味着对于对象如何获得对协作对象的引用的责任倒置。

5. 在Spring中注入依赖性的方法是什么?
在Spring中有两种方法来进行依赖性注入。
通过setter方法的依赖注入.

依赖注入通过构造函数.

6. 在Spring中Bean是什么?
由Spring IOC容器管理的普通POJO类被称为Spring bean。它是Spring应用程序的核心部分.
例如:

<bean id="countryBean" class="com.micai.spring.model.Country">
	<property name="countryName" value="India"/>
	<property name="capital" ref="CapitalBean"/>
</bean>
7. 如何在应用程序中配置Spring?
有三种方法可以做到这一点。
基于XML的配置.
基于Java的配置.

基于注释的配置。

8. 什么是基于Spring XML的配置?
在基于Spring XML的配置中,您定义了XML文件中的所有相依性。您可以在XML文件中定义所有bean,并且所有依赖项都是使用这些XML文件读取的.
例如 :

Sample applicationContext.xml file

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
  <bean id="CountryBean" class="com.micai.spring.model.Country">
      <property name="countryName" value="India"/>
      <property name="capital" ref="CapitalBean"/>
  </bean>
  <bean id="CapitalBean" class="com.micai.spring.model.Capital">
      <property name="capitalName" value="Delhi"/>
  </bean>
</beans>
9. 什么是Spring java的配置?

在Spring Java的配置中,您只使用Java类注入所有依赖项。你可以使用@Configuaration和@bean注解来完成它.

package com.micai.spring.config;

import com.micai.spring.model.Country;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 描述:
 * <p>
 *
 * @author: 赵新国
 * @date: 2018/5/29 13:51
 */
@Configuration
public class ApplicationConfiguration {

    @Bean(name = "countryObj")
    public Country getCountry() {
        return new Country("India");
    }
}

上面的文件等价于下面的spring配置xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context.xsd"> 
<context:annotation-config/>  
 <bean id="countryObj" class="com.micai.spring.model.Country" >
  <property name="countryName" value="India"/>
 </bean>
</beans>

要获得bean到应用程序上下文,您需要使用下面的代码

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
Country country = (Country) applicationContext.getBean("countryObj");
10. 什么是spring注解的配置?
您也可以通过注释来进行依赖注入,而不是XML配置。你可以使用注解来定义bean的自动装配。 您可以使用@Component,@Repository,@Service和 @Controller注释来在Spring应用程序中配置bean。

在默认情况下,注释连接不会打开。你需要打开它 :

<?xml version="1.0" encoding="UTF-8"?>
<bean> 
<context:annotation-config/>  
</beans>

一旦您输入了以上代码,您就可以开始在类、字段或方法上使用注释了.

11. 在Spring中不同的bean范围是什么?
在spring中支持的bean范围有5种类型:
singleton – 在每个Spring IoC容器中对单个对象实例进行单一bean定义.
prototype – 每次请求时返回一个新的bean实例
request – 每个HTTP请求返回一个bean实例.
session – 每个HTTP会话返回一个bean实例.

globalSession – 在每个全局HTTP会话中返回单个bean实例.

12. 在Spring中,bean的默认范围是什么?

singleton是Spring中bean的默认范围。如果你想要不同的范围,你必须显式地改变一个bean的范围.

13. 什么是ApplicationContext,它的功能是什么?
ApplicationContext是向应用程序提供配置信息的中心接口.

一个ApplicationContext提供了以下功能:
Bean工厂方法,从ListableBeanFactory继承。这就避免了应用程序使用单例的需求.
解决消息、支持国际化的能力。从MessageSource接口继承的.
以通用的方式加载文件资源的能力。从ResourceLoader接口继承的.
发布事件的能力。实现必须提供一种注册事件监听器的方法.

继承父上下文中的继承。后代上下文中的定义总是优先考虑的。这意味着,例如,一个单例上下文可以被整个web应用程序使用,而每个servlet都有自己的子上下文,独立于任何其他servlet.

14. 如何在Spring中注入集合?

您可以使用列表和value标记初始化集合:

<bean id="country" class="com.micai.spring.model.Country">
    <property name="countryName" value="India"/>
    <property name="capitalList">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
            <value>ddd</value>
        </list>
    </property>
</bean>
15. Spring的自动装配是什么意思?

在Spring框架中,您可以自动地用自动连接功能将bean连接起来。为了启用它,只需定义“autowire”属性,Spring容器可以在不使用的情况下自动连接协作bean之间的关系,也可以帮助减少XML配置的数量。

<bean id="country" class="com.micai.spring.model.Country" autowire="byName">
16. 什么是Spring支持的不同的自动装配模式?
有以下的自动装配模式,可以用来指示Spring容器使用自动连接进行依赖注入.
no:
默认情况下,没有自动连接,通过“ref”属性手动设置它,就像我们通过settor方法post在依赖注入中所做的那样.
byName:
由属性名自动装配。Spring容器查看在XML配置文件中将autowire属性设置为byName的bean的属性,并试图将其与XML配置文件中的bean名称相匹配.
byType:
通过属性数据类型自动装配。Spring容器查看在XML配置文件中将autowire属性设置为byType的bean的属性。然后,如果它的类型与配置文件中的一个bean名称相匹配,那么它就会尝试匹配并连接一个属性。如果有不止一个这样的bean存在,就会抛出一个致命的异常.
contructor:
构造函数参数中的byType模式.
autodetect:
Spring首先尝试通过构造器使用autowire,如果它不起作用,Spring尝试通过byType自动连接.

17. Spring AOP是什么?

面向方面的编程是一种类似于面向对象编程的编程范式。面向对象编程的关键单元是类,类似于AOP的关键单元是方面。方面支持诸如事务管理之类的关注点的模块化,它跨越多个类和类型。它也称为横切关注点.

18. 在Spring AOP中,什么是方面、建议、连接点和切入点?

Aspect: 方面是一个实现跨越不同类的关注点的类,比如logging。它只是一个名字.
Joint Point : 它是程序执行的一个点,例如方法的执行。在Spring AOP中,连接点总是表示方法执行.
Advice : 由方面在特定的连接点上采取的行动。例如:在执行getEmployeeName()方法之前,put logging。这里,我们在建议之前使用.

Pointcut : 切入点是决定在匹配的连接点上执行建议的表达式。Spring在默认情况下使用AspectJ切入点表达式语言.

19. 在Spring中什么@Qualifier注解?

你可以在XML配置中有多个相同类型的bean但是你想要自动连接其中一个,所以@Qualifier消除了由@Autowired创建的混乱,通过声明哪个bean是自动连接的。

20. 在Spring中什么@Required注解?

这个注释仅仅表明受影响的bean属性必须在配置时填充:要么通过bean定义中的显式属性值,要么通过自动装配。如果受影响的bean属性没有被填充,容器将抛出异常;这允许出现急切和显式的故障,避免NullPointerExceptions或稍后的类似。

假设你有一个非常大的应用程序,你会得到NullPointerExceptions,因为需要的依赖没有被注入,所以很难找出哪里出了问题。这个注释帮助我们调试.

1.Spring框架是什么?

Spring框架是一个开放源码框架,用于解决企业应用程序开发的复杂性。Spring框架的主要优势之一是它的分层架构,它允许您对所使用的组件进行选择。Spring的主要模块是Spring核心、Spring AOP和Spring MVC。

2.Spring框架的主要特性是什么?
轻量级:

在规模和透明度方面,spring是轻量级的。spring框架的基本版本大约是1 MB。处理开销也可以忽略不计.

控制反转 (IOC):
依赖注入或控制反转的基本概念是,程序员不需要创建对象,而是描述如何创建对象.

面向方面(AOP):
Spring支持面向方面的编程。
面向方面的编程是指将次要或支持功能与主程序的业务逻辑隔离的编程范例。AOP是一种很有前途的技术,用于分离横切关注点,这在面向对象编程中通常很难做到。应用程序的模块化以这种方式增加,并且它的维护变得更加容易。

容器:
Spring包含并管理应用程序对象的生命周期和配置。

MVC框架:
Spring提供了基于核心Spring功能的MVC web应用程序框架。这个框架可以通过策略接口进行高度的可配置,并且可以容纳多个视图技术,如JSP、Velocity、tile、iText和POI。

事务管理:
Spring框架为事务管理提供了一个通用的抽象层。这使得开发人员可以添加可插拔的事务管理器,并且可以轻松地在不处理底层问题的情况下事务。

JDBC的异常处理:

Spring的JDBC抽象层提供了一个有意义的异常层次结构,它简化了错误处理策略。与Hibernate、JDO和iBATIS的集成:Spring提供了与Hibernate、JDO和iBATIS的最佳集成服务。

3.解释Spring的主要模块?
Spring AOP:

Spring的关键组件之一是AOP框架。AOP在Spring中使用:
提供声明性的企业服务,特别是作为EJB声明式服务的替代品。最重要的服务是声明式事务管理,它建立在Spring的事务抽象之上。
允许用户实现自定义的切面,补充他们使用AOP的OOP的使用。

Spring ORM:
ORM包与数据库访问有关。它为流行的对象关系映射api提供集成层,包括JDO、Hibernate和iBatis。

Spring Web:
Spring Web模块是Spring的一部分?s web应用程序开发堆栈,其中包括Spring MVC。

Spring DAO:
Spring的DAO(Data Access Object)支持主要用于使用JDBC、Hibernate或JDO等技术标准化数据访问工作。

Spring Context:
此包构建在bean包之上,以增加对消息源的支持和观察者的设计模式支持,以及应用程序对象使用一致的API获得资源的能力。

Spring Web MVC:
这是为web应用程序提供MVC实现的模块。

Spring Core:
核心包是Spring框架中最重要的组件。

该组件提供依赖性注入特性。BeanFactory提供了一种工厂模式,它将诸如初始化、创造和访问对象与实际程序逻辑的访问分离开来。

4. 什么是Spring的依赖注入(IOC)?
依赖注入的基本概念(也称为控制模式反转)是指您不创建对象,而是描述如何创建对象。您不会将组件和服务直接连接到代码中,而是描述配置文件中哪些组件需要哪些服务。一个容器(在Spring框架的情况下,IOC容器)负责将其连接起来。

即。在应用IoC时,对象在创建时被一些外部实体赋予它们依赖关系,这些实体负责协调系统中的每个对象。也就是说,依赖项被注入到对象中。因此,IoC意味着对于对象如何获得对协作对象的引用的责任倒置。

5. 在Spring中注入依赖性的方法是什么?
在Spring中有两种方法来进行依赖性注入。
通过setter方法的依赖注入.

依赖注入通过构造函数.

6. 在Spring中Bean是什么?
由Spring IOC容器管理的普通POJO类被称为Spring bean。它是Spring应用程序的核心部分.
例如:

<bean id="countryBean" class="com.micai.spring.model.Country">
	<property name="countryName" value="India"/>
	<property name="capital" ref="CapitalBean"/>
</bean>
7. 如何在应用程序中配置Spring?
有三种方法可以做到这一点。
基于XML的配置.
基于Java的配置.

基于注释的配置。

8. 什么是基于Spring XML的配置?
在基于Spring XML的配置中,您定义了XML文件中的所有相依性。您可以在XML文件中定义所有bean,并且所有依赖项都是使用这些XML文件读取的.
例如 :

Sample applicationContext.xml file

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
  <bean id="CountryBean" class="com.micai.spring.model.Country">
      <property name="countryName" value="India"/>
      <property name="capital" ref="CapitalBean"/>
  </bean>
  <bean id="CapitalBean" class="com.micai.spring.model.Capital">
      <property name="capitalName" value="Delhi"/>
  </bean>
</beans>
9. 什么是Spring java的配置?

在Spring Java的配置中,您只使用Java类注入所有依赖项。你可以使用@Configuaration和@bean注解来完成它.

package com.micai.spring.config;

import com.micai.spring.model.Country;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 描述:
 * <p>
 *
 * @author: 赵新国
 * @date: 2018/5/29 13:51
 */
@Configuration
public class ApplicationConfiguration {

    @Bean(name = "countryObj")
    public Country getCountry() {
        return new Country("India");
    }
}

上面的文件等价于下面的spring配置xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context.xsd"> 
<context:annotation-config/>  
 <bean id="countryObj" class="com.micai.spring.model.Country" >
  <property name="countryName" value="India"/>
 </bean>
</beans>

要获得bean到应用程序上下文,您需要使用下面的代码

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
Country country = (Country) applicationContext.getBean("countryObj");
10. 什么是spring注解的配置?
您也可以通过注释来进行依赖注入,而不是XML配置。你可以使用注解来定义bean的自动装配。 您可以使用@Component,@Repository,@Service和 @Controller注释来在Spring应用程序中配置bean。

在默认情况下,注释连接不会打开。你需要打开它 :

<?xml version="1.0" encoding="UTF-8"?>
<bean> 
<context:annotation-config/>  
</beans>

一旦您输入了以上代码,您就可以开始在类、字段或方法上使用注释了.

11. 在Spring中不同的bean范围是什么?
在spring中支持的bean范围有5种类型:
singleton – 在每个Spring IoC容器中对单个对象实例进行单一bean定义.
prototype – 每次请求时返回一个新的bean实例
request – 每个HTTP请求返回一个bean实例.
session – 每个HTTP会话返回一个bean实例.

globalSession – 在每个全局HTTP会话中返回单个bean实例.

12. 在Spring中,bean的默认范围是什么?

singleton是Spring中bean的默认范围。如果你想要不同的范围,你必须显式地改变一个bean的范围.

13. 什么是ApplicationContext,它的功能是什么?
ApplicationContext是向应用程序提供配置信息的中心接口.

一个ApplicationContext提供了以下功能:
Bean工厂方法,从ListableBeanFactory继承。这就避免了应用程序使用单例的需求.
解决消息、支持国际化的能力。从MessageSource接口继承的.
以通用的方式加载文件资源的能力。从ResourceLoader接口继承的.
发布事件的能力。实现必须提供一种注册事件监听器的方法.

继承父上下文中的继承。后代上下文中的定义总是优先考虑的。这意味着,例如,一个单例上下文可以被整个web应用程序使用,而每个servlet都有自己的子上下文,独立于任何其他servlet.

14. 如何在Spring中注入集合?

您可以使用列表和value标记初始化集合:

<bean id="country" class="com.micai.spring.model.Country">
    <property name="countryName" value="India"/>
    <property name="capitalList">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
            <value>ddd</value>
        </list>
    </property>
</bean>
15. Spring的自动装配是什么意思?

在Spring框架中,您可以自动地用自动连接功能将bean连接起来。为了启用它,只需定义“autowire”属性,Spring容器可以在不使用的情况下自动连接协作bean之间的关系,也可以帮助减少XML配置的数量。

<bean id="country" class="com.micai.spring.model.Country" autowire="byName">
16. 什么是Spring支持的不同的自动装配模式?
有以下的自动装配模式,可以用来指示Spring容器使用自动连接进行依赖注入.
no:
默认情况下,没有自动连接,通过“ref”属性手动设置它,就像我们通过settor方法post在依赖注入中所做的那样.
byName:
由属性名自动装配。Spring容器查看在XML配置文件中将autowire属性设置为byName的bean的属性,并试图将其与XML配置文件中的bean名称相匹配.
byType:
通过属性数据类型自动装配。Spring容器查看在XML配置文件中将autowire属性设置为byType的bean的属性。然后,如果它的类型与配置文件中的一个bean名称相匹配,那么它就会尝试匹配并连接一个属性。如果有不止一个这样的bean存在,就会抛出一个致命的异常.
contructor:
构造函数参数中的byType模式.
autodetect:
Spring首先尝试通过构造器使用autowire,如果它不起作用,Spring尝试通过byType自动连接.

17. Spring AOP是什么?

面向方面的编程是一种类似于面向对象编程的编程范式。面向对象编程的关键单元是类,类似于AOP的关键单元是方面。方面支持诸如事务管理之类的关注点的模块化,它跨越多个类和类型。它也称为横切关注点.

18. 在Spring AOP中,什么是方面、建议、连接点和切入点?

Aspect: 方面是一个实现跨越不同类的关注点的类,比如logging。它只是一个名字.
Joint Point : 它是程序执行的一个点,例如方法的执行。在Spring AOP中,连接点总是表示方法执行.
Advice : 由方面在特定的连接点上采取的行动。例如:在执行getEmployeeName()方法之前,put logging。这里,我们在建议之前使用.

Pointcut : 切入点是决定在匹配的连接点上执行建议的表达式。Spring在默认情况下使用AspectJ切入点表达式语言.

19. 在Spring中什么@Qualifier注解?

你可以在XML配置中有多个相同类型的bean但是你想要自动连接其中一个,所以@Qualifier消除了由@Autowired创建的混乱,通过声明哪个bean是自动连接的。

20. 在Spring中什么@Required注解?

这个注释仅仅表明受影响的bean属性必须在配置时填充:要么通过bean定义中的显式属性值,要么通过自动装配。如果受影响的bean属性没有被填充,容器将抛出异常;这允许出现急切和显式的故障,避免NullPointerExceptions或稍后的类似。

假设你有一个非常大的应用程序,你会得到NullPointerExceptions,因为需要的依赖没有被注入,所以很难找出哪里出了问题。这个注释帮助我们调试.

猜你喜欢

转载自blog.csdn.net/bibiboyx/article/details/81001870