Java 面试题之 Spring 部分

Spring

1.1.描述一下 Spring 框架的作用和优点?

1)Spring 是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入;

2)Spring 提供的 IOC 和 AOP 应用,可以将组件的耦合度降至最低,即解耦,便于系统日后的维护和升级;

3)Spring 为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三方框架和技术整合应用,可以自由选择采用哪种技术进行开发。

 

1.2.如何控制 Bean 对象的作用域,默认的作用域是什么?

1)可以通过 <bean> 定义的 scope 属性指定 Bean 对象的作用域,或者通过注解的形式 @scope 指定 Bean 对象的作用域。

2)默认 Bean 的作用域为 singleton。singleton 作用域是 spring 的缺省作用域,singleton 是单例类型,在创建容器时就会自动创建一个 bean 的对象,无论你是否使用,它都存在,且每次获取的对象都是同一个对象。如下图所示:

<bean id="..." class="..." scope="singleton">
</bean>

3)prototype 是原型类型,在创建容器时没有实例化,每次获取 bean 时都会创建一个新的对象。根据经验,对有状态的 bean 应该使用 prototype 作用域,对无状态的 bean 应该使用 singleton 作用域。如下图所示:

<bean id="..." class="..." scope="prototype">
...
</bean>

 

1.3.描述常见注解及其作用?

1)@Component 为通用注解;

2)@Repository 为持久层组件注解;

3)@Service 为业务层组件注解;

4)@Scope 为 Bean 的作用域注解;

5)@Autowired 和 @Inject 为指定 Bean 之间依赖关系的注解;

6)@Value 为注入 Spring 表达式值的注解。

 

1.4.描述 Spring Web MVC 的工作流程?

1)浏览器发出 Spring MVC 请求后,请求交给前端控制器 DispacherServlet 处理。

2)控制器通过 HandlerMapping 维护的请求和 Controller 映射信息,找到相应的 Controller 组件处理请求。

3)执行 Controller 组件约束方法处理请求,在约束方法中可以调用 Service 和 DAO 等组件完成数据库操作。约束方法可以返回一个 ModelAndView 对象,封装了模型数据和视图名称信息。

4)控制器接收 ModelAndView 之后,调用 ViewResolver 组件,定位 View 的 JSP 并传递 Model 信息,生成响应界面结果。

 

1.5.Spring 有哪些缺点?

1)JSP 中需要写很多的代码;

2)控制器过于灵活,没有一个公共的控制器;

3)不支持分布式部署。

 

1.6.Spring 中的 IOC 和 AOP 是什么含义?

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器控制依赖;第二层是依赖注入:将相互依赖的对象分离,在 Spring 配置文件中描述他们的依赖关系。他们的依赖关系只有在使用时才建立。

AOP:面向切面,是一种编程思想,OOP 的延续。将系统中的非核心的业务提取出来,进行单独处理。

Spring 中的 IOC 和 AOP 都是为了解决系统代码耦合度过高的问题,使代码重用度高、易于维护。比如事务、日志、安全等。

 

1.7.简述 Spring 事务共有几种管理方式?

编程式事务(代码中嵌入)和声明式事务(利用注解方式,XML)

 

1.8.简述事务拦截器的原理?

Spring 中的事务拦截器是通过 AOP 代理来实现的。对被代理的每个方法进行拦截,在方法执行前启动事务,方法执行后根据是否有异常和异常的种类进行提交或回滚。

 

1.9.Spring 中的 Bean 有哪些作用域?

1)singleton:Spring IOC 容器只会创建该 Bean 的唯一实例;

2)prototype:每次请求都会创建一个实例;

3)request:每次 http 都会生成一个新的 Bean。需要注意的是该作用域仅在基于 Web 的 ApplicationContext 情形下有效,以下的 session 和 global Session 也是如此;

4)session:每次会话创建一个实例;

5)global session:全局的 HttpSession 中,容器会返回 bean 的同一个实例。

 

1.10.Spring 提倡面向接口编程,请讲一下对它的理解?

在一个对象对象的系统中,系统中的各种功能是由许许多多的不同的对象协作完成的。基于这样的一个事实,对象内部是如何实现的,对于系统设计人员来讲就不那么重要了;而各个对象之间的协作关系成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是按照这种思想来编程。

 

1.11.谈谈你对用 SSH 框架进行开发的理解?

SSH 框架指的是 Struts、Spring、Hibernate。其中,Struts 主要用于流程控制;Spring 的控制反转起到解耦合额作用;Hibernate 主要用于数据持久化。

 

1.12.简述 Spring IOC 和 AOP?

IOC 控制反转就是将某一接口具体实现类的控制从调用类移除,转交给第三方,即 Spring 容器;

在业务系统中除了要实现业务代码外,还是实现权限拦截、性能监控、事务管理等非业务功能。通常的做法是将非业务代码穿插在业务代码中,从而导致业务组件和非业务组件的耦合。AOP 面向切面编程,就是将这些分散在各个业务逻辑代码中的非业务代码,通过横向切割的方式抽取到一个独立的模块中,从而实现业务组件与非业务组件的解耦。

发布了7 篇原创文章 · 获赞 10 · 访问量 3001

猜你喜欢

转载自blog.csdn.net/qq_40798777/article/details/104367256
今日推荐