还可以查看我们最新的文章69Spring面试问答-最终名单 。
1)什么是春天?
回答:
Spring是控件和面向方面的容器框架的轻量级转换。
2)解释春天?
回答:
- 轻巧:在尺寸和透明度方面, Spring是轻巧的。 spring框架的基本版本约为1MB。 而且处理开销也可以忽略不计。
- 控制反转(IoC):使用控制反转技术在弹簧中实现松耦合。 对象提供其依赖关系,而不是创建或寻找依赖对象。
- 面向方面(AOP): Spring支持面向方面的编程,并通过将应用程序业务逻辑与系统服务分开来实现紧密的开发。
- 容器: Spring包含并管理应用程序对象的生命周期和配置。
- 框架: Spring提供了大多数内部功能,其余的代码留给了开发人员。
3)Spring框架有哪些不同的模块?
回答:
- 核心容器模块
- 应用程序上下文模块
- AOP模块(面向方面的编程)
- JDBC抽象和DAO模块
- O / R映射集成模块(对象/关系)
- 网络模块
- MVC框架模块
4)Spring框架的结构是什么?
回答:
5)什么是核心容器模块?
回答:
该模块提供了spring框架的基本功能。 在这个模块中, BeanFactory是任何基于Spring的应用程序的核心。 整个框架都建立在该模块的顶部。 这个模块是Spring容器 。
6)什么是应用程序上下文模块?
回答:
Application上下文模块使spring成为框架。 该模块扩展了BeanFactory的概念,为国际化(I18N)消息,应用程序生命周期事件和验证提供支持。 该模块还提供许多企业服务,例如JNDI访问, EJB集成 ,远程处理和调度。 它还为其他框架提供支持。
7)什么是AOP模块?
回答:
AOP模块用于为支持Spring的应用程序开发方面。 AOP联盟已经提供了很多支持,以确保Spring和其他AOP框架之间的互操作性。 该模块还向Spring介绍了元数据编程。 使用Spring的元数据支持,我们将能够在源代码中添加注释,以指示Spring在何处以及如何应用方面。
8)什么是JDBC抽象和DAO模块?
回答:
使用此模块,我们可以使数据库代码保持简洁明了,并防止由于关闭数据库资源失败而导致的问题。 在此模块中,购买了由多个数据库服务器给出的错误消息之上的有意义异常的新层。 另外,该模块使用Spring的AOP模块为Spring应用程序中的对象提供事务管理服务。
9)什么是对象/关系映射集成模块?
回答:
通过提供ORM模块,Spring还支持在纯JDBC上使用对象/关系映射(ORM)工具。 Spring提供的支持可以绑定到几个流行的ORM框架 ,包括Hibernate , JDO和iBATIS SQL Maps 。 Spring的事务管理支持所有这些ORM框架以及JDBC 。
10)什么是Web模块?
回答:
此模块建立在应用程序上下文模块的基础上,提供适用于基于Web的应用程序的上下文。 该模块还包含对一些面向Web的任务的支持,例如透明地处理文件上传的多部分请求以及将请求参数以编程方式绑定到业务对象。 它还包含与Jakarta Struts的集成支持。
11)什么是Spring MVC?
回答:
Spring带有用于构建Web应用程序的功能齐全的MVC框架。 尽管Spring可以轻松地与其他MVC框架(例如Struts)集成,但是Spring的MVC框架使用IoC可以将控制器逻辑与业务对象完全分离。 它还允许您以声明方式将请求参数绑定到业务对象。 它还可以利用Spring的任何其他服务,例如I18N消息传递和验证。
12)什么是BeanFactory?
回答:
BeanFactory是工厂模式的实现,该模式应用控制反转将应用程序的配置和依赖项与实际应用程序代码分开。
13)什么是AOP联盟?
回答:
AOP联盟是一个开源项目,其目标是通过定义一组通用的接口和组件来促进AOP的采用以及不同AOP实现之间的互操作性。
14)什么是Spring配置文件?
回答:
Spring配置文件是一个XML文件。 该文件包含类信息,并描述如何配置这些类以及如何将它们相互引入。
15)一个简单的spring应用程序包含什么?
回答:
这些应用程序就像任何Java应用程序一样。 它们由几个类组成,每个类在应用程序中执行特定的目的。 但是这些类是通过XML文件配置并相互引入的。 这个XML文件描述了如何配置这些类,称为Spring配置文件。
16)什么是XMLBeanFactory?
回答:
BeanFactory在Spring中有很多实现。 但是,最有用的工具之一是org.springframework.beans.factory.xml.XmlBeanFactory ,它根据XML文件中包含的定义加载其bean。 要创建XmlBeanFactory ,请将java.io.InputStream传递给构造函数。 InputStream将向工厂提供XML。 例如,以下代码片段使用java.io。 FileInputStream为XmlBeanFactory提供bean定义XML文件。
BeanFactory factory =新的XmlBeanFactory (新的FileInputStream (“ beans.xml”));
要从BeanFactory中检索Bean,请通过传递要检索的Bean的名称来调用getBean()方法。
MyBean myBean =(MyBean)工厂。 getBean (“ myBean”);
17)Spring框架中有哪些重要的ApplicationContext实现?
回答:
- ClassPathXmlApplicationContext –此上下文从位于类路径中的XML文件中加载上下文定义,将上下文定义文件视为类路径资源。
- FileSystemXmlApplicationContext –此上下文从文件系统中的XML文件加载上下文定义。
- XmlWebApplicationContext –此上下文从Web应用程序中包含的XML文件中加载上下文定义。
18)解释Spring框架中的Bean生命周期?
回答:
- spring容器从XML文件中找到bean的定义并实例化bean。
- 使用依赖注入,spring填充了bean定义中指定的所有属性。
- 如果Bean实现BeanNameAware接口,则工厂将通过该Bean的ID调用setBeanName() 。
- 如果Bean实现BeanFactoryAware接口,则工厂调用setBeanFactory() ,并传递其自身的实例。
- 如果有任何与Bean关联的BeanPostProcessor ,则将调用其postProcessBeforeInitialization()方法。
- 如果为bean指定了初始化方法,它将被调用。
- 最后,如果有任何与Bean关联的BeanPostProcessor ,则将调用其postProcessAfterInitialization()方法。
19)什么是豆类接线?
回答:
在Spring容器中将bean组合在一起被称为bean接线或接线。 在对bean进行接线时,应告诉容器需要哪些bean,以及如何使用依赖注入将它们绑定在一起。
20)如何在Spring应用程序中添加bean?
回答:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean id="foo" class="com.act.Foo"/><bean id="bar" class="com.act.Bar"/></beans>
在bean标记中,id属性指定bean名称,而class属性指定完全限定的类名。
21)什么是单例bean,如何创建原型bean?
回答:
Spring框架中定义的Bean是单例Bean。 如果指定为true,则bean标记中有一个名为“ singleton”的属性,则bean成为单例;如果设置为false,则bean成为原型bean。 默认情况下,它设置为true。 因此,默认情况下,spring框架中的所有bean都是单例bean。
<beans><bean id="bar" class="com.act.Foo" singleton=”false”/></beans>
22)重要的bean生命周期方法是什么?
回答:
bean有两种重要的生命周期方法。 第一个是安装程序,当将Bean装入容器时调用。 第二种方法是拆卸方法,当从容器中卸载bean时会调用该方法。
23)如何覆盖bean的默认生命周期方法?
回答:
bean标记具有两个更重要的属性,您可以使用它们定义自己的自定义初始化和销毁方法。 在这里,我展示了一个小示范。 两个新方法fooSetup和fooTeardown将添加到Foo类。
<beans><bean id="bar" class="com.act.Foo" init-method=”fooSetup” destroy=”fooTeardown”/></beans>
24)什么是内豆?
回答:
在对bean进行布线时,如果将bean元素直接嵌入到属性标签中,则该bean被称为Inner Bean。 该bean的缺点是无法在其他任何地方重用。
25)豆类注射有哪些不同类型?
回答:
有两种类型的豆类注射。
- 通过二传手
- 按构造函数
26)什么是自动接线?
回答:
您可以根据需要为咖啡豆接线。 但是spring框架也可以为您完成这项工作。 它可以自动将相关的bean连接在一起。 您所要做的只是将bean标签的autowire属性设置为autowire类型。
<beans><bean id="bar" class="com.act.Foo" Autowire=”autowire type”/></beans>
27)有哪些不同类型的自动接线?
回答:
可以通过四种不同类型进行自动装配。
- 按名字
- 按类型
- 建设者
- 自动侦测
28)与侦听器相关的事件有哪些不同类型?
回答:
有很多与spring框架的ApplicationContext相关的事件。 所有事件都是org.springframework.context.Application-Event的子类。 他们是
- ContextClosedEvent –在关闭上下文时触发。
- ContextRefreshedEvent –在初始化或刷新上下文时触发。
- RequestHandledEvent –当Web上下文处理任何请求时将触发此事件。
29)什么是方面?
回答:
一个方面是您正在实现的跨领域功能。 这是模块化应用程序的一个方面。 方面的一个示例是日志记录。 记录是整个应用程序所必需的。 但是,由于应用程序倾向于基于功能分解为多个层,因此通过继承重用日志记录模块没有任何意义。 但是,您可以创建一个日志记录方面,并使用AOP在整个应用程序中应用它。
30)什么是联合点?
回答:
连接点是应用程序执行过程中可以插入方面的点。此点可以是调用方法,引发异常或什至修改字段。 这些就是您的方面的代码可以插入到应用程序的常规流程中以添加新行为的要点。
31)什么是建议?
回答:
咨询是一个方面的实施。 这就像告诉您的应用新行为。 通常,建议在连接点处插入到应用程序中。
32)什么是切入点?
回答:
切入点是定义建议应在哪些连接点应用的东西。 可以在AOP框架支持的任何连接点上应用建议。 这些切入点允许您指定可以在何处应用建议。
33)什么是AOP简介?
回答:
简介允许用户向现有的类中添加新的方法或属性。 然后可以将其引入到现有的类中,而不必更改类的结构,而是为他们提供新的行为和状态。
34)什么是目标?
回答:
目标是正在建议的班级。 该类可以是第三方类,也可以是您要向其添加自定义行为的您自己的类。 通过使用AOP的概念,目标类可以将注意力集中在主要关注点上,而无需意识到正在应用的任何建议。
35)什么是代理?
回答:
代理是在将建议应用于目标对象之后创建的对象。 当您想到客户端对象时,目标对象和代理对象是相同的。
36)编织是什么意思?
回答:
将方面应用于目标对象以创建新的代理对象的过程称为编织。 这些方面将在指定的连接点处编织到目标对象中。
37)编织的不同点是什么?
回答:
- 编译时间
- 上课时间
- 运行
38)Spring有哪些不同的建议类型?
回答:
- 周围:拦截对目标方法的调用
- Before:在调用目标方法之前调用
- After:返回目标方法后调用
- 抛出:目标方法抛出异常时调用
- 周围:org.aopalliance.intercept.MethodInterceptor
- 之前:org.springframework.aop.BeforeAdvice
- 之后:org.springframework.aop.AfterReturningAdvice
- 抛出:org.springframework.aop.ThrowsAdvice
39)有哪些不同类型的自动代理?
回答:
- BeanNameAutoProxyCreator
- DefaultAdvisorAutoProxyCreator
- 元数据自动代理
40)与Spring应用程序中引发的所有异常相关的Exception类是什么?
回答:
DataAccessException – org.springframework.dao.DataAccessException
41)那些SpringDAO类会抛出什么样的异常?
回答:
spring的DAO类不会引发任何与技术相关的异常,例如SQLException。 他们抛出异常,这些异常是DataAccessException的子类。
42)什么是DataAccessException?
回答:
DataAccessException是RuntimeException。 这是一个未经检查的异常。 不会强迫用户处理此类异常。
43)如何配置Bean以从JNDI获取数据源?
回答:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName"><value>java:comp/env/jdbc/myDatasource</value></property></bean>
44)如何创建数据源连接池?
回答:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driver"><value>${db.driver}</value></property><property name="url"><value>${db.url}</value></property><property name="username"><value>${db.username}</value></property><property name="password"><value>${db.password}</value></property></bean>
45)如何在Spring框架中更有效地使用JDBC?
回答:
在spring框架提供的名为JdbcTemplate的模板类的帮助下,可以更有效地使用JDBC。
46)如何使用JdbcTemplate?
回答:
通过使用Spring JDBC框架,资源管理和错误处理的负担大大减轻了。 因此,它使开发人员可以编写语句和查询以将数据往返数据库。
JdbcTemplate模板=新的JdbcTemplate (myDataSource);
一个简单的DAO类如下所示。
public class StudentDaoJdbc implements StudentDao {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}more..}
配置如下所示。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="dataSource"/></property></bean><bean id="studentDao" class="StudentDaoJdbc"><property name="jdbcTemplate"><ref bean="jdbcTemplate"/></property></bean><bean id="courseDao" class="CourseDaoJdbc"><property name="jdbcTemplate"><ref bean="jdbcTemplate"/></property></bean>
47)如何在Spring使用JdbcTemplate将数据写入后端?
回答:
在将数据写入数据库时,JdbcTemplate使用其中一些回调。 您将在这些接口中找到的有用性会有所不同。 有两个简单的界面。 一个是PreparedStatementCreator ,另一个是BatchPreparedStatementSetter 。
48)解释PreparedStatementCreator吗?
回答:
PreparedStatementCreator是用于将数据写入数据库的最常用接口之一。 该接口具有一种方法createPreparedStatement()。
PreparedStatement createPreparedStatement (连接conn)
抛出SQLException;
实施此接口后,我们应该从Connection参数创建并返回PreparedStatement,并且自动处理异常。 当实现此接口时,还将实现另一个接口SqlProvider ,该接口具有一个称为getSql()的方法,该方法用于向JdbcTemplate提供sql字符串。
49)解释BatchPreparedStatementSetter吗?
回答:
如果用户一次要更新多行内容,则可以使用BatchPreparedStatementSetter 。 该接口提供两种方法
setValues(PreparedStatement ps,int i)抛出SQLException;
int getBatchSize();
getBatchSize()告诉JdbcTemplate类创建多少个语句。 并且这还决定了setValues()会被调用多少次。
50)解释一下RowCallbackHandler以及为什么要使用它?
回答:
为了浏览记录,我们通常使用ResultSet。 但是spring提供了一个界面来处理所有的负担,让用户决定如何处理每一行。 spring提供的接口是RowCallbackHandler 。 有一个方法processRow()需要实现,以便它适用于每一行。
void processRow (java.sql.ResultSet rs);
翻译自: https://www.javacodegeeks.com/2013/09/spring-interview-questions.html