Spring常见面试问题

1. Spring的常见面试题

1、什么是Spring框架?Spring 框架有哪些主要模块?
Spring 框架是一个为 Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring 框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring 框架,不必担心Spring是如何在后台进行工作的。
Spring 框架至今已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成、 Web、AOP(面向切面编程)、工具、消息和测试模块。
在这里插入图片描述
2、使用 Spring 框架能带来哪些好处 ?
下面列举了一些使用 Spring 框架带来的主要好处 ∶
1、简化开发,解放双手
2、提供内置的解决方案BOP、IOC、AOP
3、声明式事务管理,TransactionManager
4、提供诸多的工具类,围绕Spring生态,比如JdbcTemplate
5、Dependency Injection(DI)方法使得构造器和 JavaBeanproperties文件中的依赖关系一目了然。
6、与EJB 容器相比较,IOC 容器更加趋向于轻量级。这样一来IOC 容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
7、Spring并没有闭门造车,Spring利用了已有的技术比如 ORM框架、logging框架、J2EE、Quartz和 JDK Timer ,以及其他视图技术。
8、Spring 框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
9、要测试一项用Spring 开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用 JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据。 5、Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行 web 框架的以外的有力选项。
10.Spring提供了一个便捷的事务管理接口,适用于小型的本地事务处理(比如在单 DB的环境下)和复杂的共同事务处理(比如利用 JTA的复杂 DB 环境)。

3、什么是控制反转(IOC)?什么是依赖注入?

1、控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过"依赖注入" 实现的。
2、控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。
3、依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

4、在Java中依赖注入有哪些方式?
1.构造器注入 2.Setter 方法注入 3.接口注入

5、BeanFactory 和ApplicationContext有什么区别?
1 ApplicationContext是BeanFactory的实现类
2 BeanFactory是顶层设计,而ApplicationContext是面向用户的。

BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的 bean 实例化。
BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(itialization Methods)和销毁方法(destruction Methods)。
从表面上看,AppiationContext如同 bean factory一样具有bean定义、bean关联关系的设置,根据请求分发 bean的功能。但ApplicationContext在此基础上还提供了其他的功能。
1.提供了支持国际化的文本消息 2.统一的资源文件读取方式 3.已在监听器中注册的 bean 的事件
以下是三种较常见的 ApplicationContext 实现方式∶
1、ClassPathXmlApplicationContext∶从classpath的XML配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中取得。
ApplicationContextcontext= new ClassPathXmlApplicationContext("appicationxml); 2、FilesystemXmlApplicationContext由文件系统中的XML 配置文件读取上下文。 ApplicationContext context= new FilesystemXmlApplicationContext(“appicationxm”); 3、XmlWebApplicationContext∶由 Web 应用的XML文件读取上下文。

6、Spring 提供几种配置方式来设置元数据?
将Spring配置到应用开发中有以下三种方式; 1.基于 XML 的配置2.基于注解的配置 3.基于 Java 的配置

五、请解释Spring 中bean的生命周期
所谓生命周期,就是:从创建,到调用,到销毁
singleton 从Spring容器的启动到Spring容器的销毁,如果是延时加载,在调用前创建对象
prototype 在调用钱创建,在调用后销毁
作用域决定了生命周期的长短

六、Spring Bean 各作用域之间的区别
1、 singleton 作用域全局,在任何地方可以通过IOC容器拿到它
2、prototype 全局的
3、request 在一次请求发起和结束之间
4、session 一个session创建和session 失效之间,一般默认是30分钟
5、golbal-session porlet可以理解为容器中的一个应用(spring5不在支持)

七、Spring中的Bean是线程安全的吗?
这是一个坑,问的就是 你自己写的bean是线程安全的吗?

Spring中的Bean是否是线程安全和Spring无关,和你自己写的代码有关

八、Spring中用到了那些设计模式
Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的∶
1、代理模式—在 AOP 和 remoting 中被用的比较多。
2、单例模式∶在spring 配置文件中定义的 bean 默认为单例模式。
3、模板模式∶ 用来解决代码重复的问题。
比如.RestTemplate, JmsTemplate, JpaTemplate。
4、委派模式∶Srping 提供了 DispatcherServlet 来对请求进行分发。
5、工厂模式∶BeanFactory用来创建对象的实例,贯穿于Beanfactory/ApplicationContext接口的核心理念。
6、代理模式∶ AOP思想的底层实现技术,Spring 中采用JDK Proxy和CgLib类库。

九、Spring、Spring Boot、Spring cloud 的区别
答:Spring以后的生态,它完成我的日常开发的所有功能,一个Spring打天下
Spring Boot,简化开发,Spring(简化)的不够,因为配置文件很头疼,配置的 管理(架构师很累),内置了默认的配置,我们需要配的是需要覆盖的,不需要覆盖实现0配置
全面的去Servlet化,能够自运行了,部署也简单了。一个jar包打天下,不需要tomcat
官方层面提供了一套脚手架,一键搭建。节省时间
Spring Cloud 正式进军分布式。
注册中心,服务发现、监控(链路追踪),配置中心。负载,熔断。为的是打造一个生态。不需要自己整合。一站式分布式解决方案

Spring Cloud 依赖 Spring boot ,Spring boot 依赖Spring

十、spring 如何接管Mybatis的事务
想办法拿到Connection

十一、BeanFactory 和 FactoryBean的区别
BeanFactoryjiushi Ioc容器的顶层设计
FacroryBean 用来构建Bean的一个包装类

十二、项目中如何应用AOP
答:声明式事务管理、日志监听、权限管理、安全监控

十三、Spring xml 和注解方式混用
新老项目交替时,降低未知的风险,尽量保留已经稳定的配置
如果是新项目,尽量用统一的方式

十四、一个方法内,for循环内重复操作数据库,是用一个连接还是多个连接
千万不要在一个方法内使用for循环去查询数据库。因为会多次连接数据库,导致连接池的数量不可控。因为循环的次数未知。
解决方案:
1、分页:分页数据时可控的
2、缓存
3、联合查询

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值