首页 > 编程语言 > 详细

spring相关面试题

时间:2021-06-22 22:14:46      阅读:21      评论:0      收藏:0      [点我收藏+]

相关面试题

1、什么是spring?

Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

 

2、使用Spring框架的好处是什么?

  • 轻量:Spring 是轻量的,基本的版本大约2MB。
  • 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
  • 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  • 容器:Spring 包含并管理应用中对象的生命周期和配置。
  • MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
  • 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
  • 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

 

3、Spring由哪些模块组成?

简单可以分成6大模块:

  • Core
  • AOP
  • ORM
  • DAO
  • Web
  • Spring EE

 

4、什么是IOC?

控制反转,把对象的创建和对象之间的调用过程交给spring进行管理;

使用 Ioc 的目的:解耦(降低耦合度);

底层原理使用:xml解析、工厂模式、反射;

 

5、ioc的接口有哪些?

1、ioc思想基于ioc容器完成、ioc容器底层就是对象工厂;

2、spring提供了ioc容器的两种方式:(两个接口);

  (1)、BeanFactory:ioc容器的基本实现,是spring内部的使用接口,不推荐开发人员进行使用;

        在加载配置文件的时候不会创建对象、在获取(使用)对象的时候才会进行创建;

  (2)、ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用;

        在加载配置文件的时候会直接创建对象;

  (3)、Application接口的实现类;

      技术分享图片

 

6、有哪些不同类型的IOC(依赖注入)方式?

  • 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
  • Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。(建议使用)

 

7、解释不同方式的自动装配?

  • no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。
  • byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
  • byType::通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出错误。
  • constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
  • autodetect:首先尝试使用constructor来自动装配,如果无法工作,则使用byType方式。

 

8、spring中有两种 bean,一种是普通 bean,另一种就是 FactoryBean?

  普通bean:在配置文件中定义的类型就是返回的类型;

  工厂bean:在配置文件中定义的类型可以和返回的类型不一样;返回的是一个 BeanFactory;

import org.springframework.beans.factory.FactoryBean;

public class MyFactoryBean implements FactoryBean {

    //定义返回的Bean
    @Override
    public Object getObject() throws Exception {
        return new Stu();
    }

    //定义返回的Bean的类型
    @Override
    public Class<?> getObjectType() {
        return null;
    }

    //当前的Bean是否为单例
    @Override
    public boolean isSingleton() {
        return false;
    }
}
    <!--定义的bean、返回是一个 FactoryBean-->
    <bean id="beanFactory" class="com.ithailin.interview.up.spring5.MyFactoryBean">
    </bean>

 

9、ioc操作bean的生命周期?

1、通过构造器创建 bean 的实例(无参构造器);

2、为 bean 的属性设置值,和对其它 bean 的引用(调用 setter 方法);

  调用后置处理器;postProcessBeforeInitialization

3、调用 bean 的初始化方法(需要进行配置初始化方法);

  调用后置处理器;postProcessAfterInitialization

4、bean 可以进行使用了(对象获取到了);

5、当容器关闭的时候,调用 bean 的销毁方法(需要进行配置销毁的方法);

 

10、ioc中bean的作用域?

在spring中,可以在<bean>的scope属性设置bean的作用域,以决定这个bean是单实例的还是多实例的;

默认情况下,spring只为每个ioc容器声明的bean创建唯一一个实例,整个ioc容器范围内都能共享这个实例,所有后续的getBean()和bean的引用都将返回这个唯一的bean实例,该作用域被称为singleton,他是所有bean的默认作用域;

singleton:在ioc容器中存在一个bean实例,bean以单实例的方式存在;当ioc容器被创建时,实例化该bean;

prototype:当ioc容器被创建时,不会实例化该bean;每次调用getBean()时都会返回一个新的bean实例;

request:每次http请求都会返回一个新的bean实例,该作用域只适用于WebApplicationContext环境;

session:同一个http session共享一个bean实例,该作用域只适用于WebApplicationContext环境; 

spring相关面试题

原文:https://www.cnblogs.com/jhdhl/p/14920160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!