Java高级开发

Java架构-最新最全的Spring面试题系列【附带答案】

2019-07-14  本文已影响32人  程序员夏天

1.什么是Spring?

Spring是一个反转控制IOC和AOP的开发框架和平台。

2.解释一下Spring?

      a.轻量 : Spring 在大小和透明度上是轻量的,Spring基本核心版本大概只有1M,处理开销也非常小

      b.反转控制Inversion of control (IoC) : Spring使用IOC实现松耦合,对象不是自己主动去寻找依赖而是依赖主动推给了自己。

      c.面向方面(AOP) : Spring支持面向方面编程,从业务逻辑中分离关注,能够实现聚焦开发。.

      d.容器 : Spring 容器包含和管理应用对象的生命周期。

      e.框架 : Spring提供最内核的功能,其余留给开发者自己开发。 

3.Spring框架有哪些不同的模块?

      a.核心容器模块

      b.应用上下文模块Application context

      c.AOP模块

      d.JDBC抽象和DAO模块

      e.O/R映射整合模块

       f.Web 模块

       g.MVC 框架模块

4.Spring框架的结构如何?

5.什么是核心容器模块?

提供基本功能的Spring框架。在此模块中的BeanFactory是任何基于Spring的应用程序的心脏。整个框架是建立在本模块的基础之上。该模块生成Spring容器。 

6.什么是应用上下文Application context模块?

应用程序上下文模块使得Spring成为了一个框架。该模块扩展了BeanFactory的概念,国际化(I18N)消息,应用程序生命周期事件,和验证提供支持。此模块还提供了许多的企业服务,例如JNDI访问,EJB集成,远程和调度。它还提供了其他框架的支持。

7.什么是AOP模块?

该AOP模块用于Spring的应用程序开发方面。提供了大部分AOP联盟的支持,以确保Spring和其它AOP框架之间的互操作性。此模块还引入元数据编程。使用Spring的元数据支持我们的源代码 ,通过引入元注释,指导我们具体在哪里实现方面编程。

8.什么是JDBC和DAO抽象模块?

使用这个模块,我们可以保持干净和简单的数据库的代码,并防止失败关闭数据库资源等问题。基于多个数据库服务器的出错信息之上建立的一个新的有意义的异常层。此外,该模块使用Spring的AOP模块实现事务管理。 

9.什么是对象关系数据库映射整合模块?

Spring支持使用一个对象/关系映射(ORM)工具,基于JDBC提供ORM模块。配合一些流行的ORM框架,包括Hibernate,JDO和iBATIS SQL映射。 Spring的事务管理也支持这些ORM框架以及JDBC。 

10.什么是Web模块?

该模块是建立在应用上下文模块之上,提供了一个基于Web应用的上下文。此模块还包含几个面向Web的任务,比如多个文件上传和将请求参数透明地绑定到你的业务对象。它也包含与Jakarta Struts的集成支持。 

11.什么是SpringMVC?

Spring提供了一个全功能的构建Web应用程序的MVC框架。虽然Spring可以很容易地集成到其他的MVC框架,如Struts,Spring的MVC框架使用IOC将控制器逻辑从业务对象中干净分离。它还允许您以声明方式绑定请求参数到你的业务对象。它还可以利用Spring的其他服务,如本地化消息和验证。 

12.什么是BeanFactory?

一个BeanFactory是工厂模式的实现,使用反转控制将从应用程序的配置和依赖性从应用程序代码中分离。 

13.什么AOP联盟?

AOP联盟是一个开放源码的项目,其目标是通过定义一套通用的接口和组件在不同的AOP产品中实现AOP和互操作性推广。 

14.什么是Spring配置文件?

Spring的配置文件是一个XML文件。此文件中包含的类信息,并描述这些类是如何配置,并实现相互的依赖导入。 

15.一个简单的Spring应用程序包括什么?

这些应用程序像任何Java应用程序。它们是由多个类组成,每个类执行应用程序内的一个特定的功能。这些类的配置是通过一个XML文件向对方导入依赖。此XML文件描述如何配置类,称为Spring配置文件。 

16.什么是XMLBeanFactory?

BeanFactory有很多实现,org.springframework.beans.factory.xml.XmlBeanFactory是其中有用常用的,它基于XML中定义加载Bean,为了创建一个 XmlBeanFactory对象, 需要将一个 java.io.InputStream传给他的构造器。InputStream 提供XML文件的读取。

BeanFactory factory = new XmlBeanFactory(new FileInputStream("beans.xml"));

MyBean myBean = (MyBean) factory.getBean(“myBean”);

17.Spring中ApplicationContext的重要实现是什么?

ClassPathXmlApplicationContext – 这个上下文是从规定的Class路径中加载一个XML资源。

FileSystemXmlApplicationContext – 从文件系统中加载一个XML文件。

XmlWebApplicationContext – 从一个Web应用中加载一个XML。

18.解释一下Bean的生命周期?

Spring容器从XML中发现一个Bean的定义,然后初始化创建它们

使用依赖注入,Spring将这个Bean中需要的属性进行导入。

如果这个Bean实现 BeanNameAware 接口, 工厂将调用setBeanName() 传递Bean的ID。

如果bean实现BeanFactoryAware,工厂将调用 setBeanFactory(), 将自己的实例传给它。

如果这个bean有 BeanPostProcessors 关联,他们的post- ProcessBeforeInitialization()方法将被调用。

如果这个Bean有一个初始init方法,它将被调用。

最后,如果有关联对象 BeanPostProcessors ,postProcessAfterInitialization()方法将被调用。

19.什么是Beand wiring?

将Bean结合在一起是wiring. 容器将把标注wiring需要的依赖对象注入到其中,将它们绑定在一起。

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>

21.什么是单例Bean如何创建一个原型Bean?

将Singleton设置为false,缺省它是true。

22.bean最重要的生命周期方法是什么?

有两个重要的bean的生命周期方法。第一个当bean时加载到容器时设置调用。第二种方法是bean从容器中卸载时被调用。 

23.如何覆盖Bean生命周期方法?

<beans>

<bean id="bar" class="com.act.Foo" init-method="fooSetup" destroy="fooTeardown"/>

</beans>

24.什么是内部innerBean?

当wiring一个Bean时,如果一个bean元素被嵌入到一个属性中,这个Bean就是内部bean。缺点是,它不能重复使用其他地方。

25.bean注入的两种类型是什么?

有两种,按照Setter注入,和按照构造器注入。

26.什么是自动匹配Auto wiring?

Spring框架将为你寻找需要注入的类自动 注入。

27.Autowire的类型有几个?

byName

byType

constructor

autodetect

28.ApplicationContext事件和相关的监听者是什么?

下面这些都是org.springframework.context.Application-Event.子类:

ContextClosedEvent – 当上下文关闭是激活

ContextRefreshedEvent – 当上下文初始化或刷新时激活。

RequestHandledEvent – 当上下文处理请求时激活

29.Spring AOP有哪些概念?

见: AOP模式

30.Spring中的Advice类型有几个? 

Around : 拦截目标方法所有调用

Before : 在目标方法被调用之前调用

After : 在目标方法被调用之后调用

Throws : 当目标方法throws exception时调用

Around : org.aopalliance.intercept.MethodInterceptor

Before : org.springframework.aop.BeforeAdvice

After : org.springframework.aop.AfterReturningAdvice

Throws : org.springframework.aop.ThrowsAdvice

31.AutoProxying有几种类型?

BeanNameAutoProxyCreator

DefaultAdvisorAutoProxyCreator

Metadata autoproxying

32.Spring中有关所有Exception的Exception是什么?

DataAccessException – org.springframework.dao.DataAccessException

33.DAO抛出的Exception是什么?

SQLException 它是DataAccessException子类

34.DataAccessException是什么?

它是RuntimeException,并不强迫一定要处理。

35.如何配置从JNDI中获得一个DataSource?

java:comp/env/jdbc/myDatasource

36.如何创建一个Spring的DataSource连接池?

${db.driver}

${db.url}

${db.username}

${db.password}

37.JDBC如何在Spring使用更有效率?

使用Spring的JdbcTemplate模板模式。

38.JdbcTemplate如何使用?

JdbcTemplate template = new JdbcTemplate(myDataSource);

public class StudentDaoJdbc implements StudentDao {

private JdbcTemplate jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

more..

}

配置:

39.如何使用JDBCTemplate写数据库SQL操作?

PreparedStatementCreator:

PreparedStatement createPreparedStatement(Connection conn)

throws SQLException;

BatchPreparedStatementSetter:

setValues(PreparedStatement ps, int i) throws SQLException;

int getBatchSize();

40.解释为什么要使用RowCallbackHandler ?

我们通常使用ResultSet逐行浏览记录,但是Spring提供这个接口由用户决定处理哪个具体一行. 这是spring的 isRowCallbackHandler提供.processRow() 方法需要实现,需要对每行记录做什么事情。

免费Java高级资料需要自己领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程!!!

​传送门:http://baminute.com:8082/activity.html

上一篇 下一篇

猜你喜欢

热点阅读