面试JAVA时,问到spring该怎么回答

目录
  • Spring面试十连问
    • 1、谈谈对IOC的理解?
    • 2、多个AOP的顺序怎么定义
    • 3、springBean是线程安全的吗?
    • 4、Spring中的bean生命周期?
    • 5、Spring 框架中都用到了哪些设计模式?
    • 6、@Autowired和@Resource之间的区别
    • 7、Spring支持的事务管理类型?
    • 8、你更倾向用那种事务管理类型?
    • 9、Spring事务中有哪几种事务传播行为?
    • 10、Spring通知有哪些类型?
  • 总结

Spring面试十连问

1、谈谈对IOC的理解?

IOC,就是我们经常所说的控制反转,DI,就是依赖注入,这两个是对同一个事物从不同角度的解释。没有使用spring框架的时候,我们需要使用一个对象,经常需要自己去手动new,需要自己取管理对象。使用spring的IOC容器之后,对象交给spring的IOC容器管理,bean的创建,初始化,结束,依赖注入等一系列,全部由IOC容器帮我们完成,我们在需要使用的时候,直接调用就行了。

2、多个AOP的顺序怎么定义

通过 Ordered 和 PriorityOrdered 接口进行排序。PriorityOrdered 接口的优先级比 Ordered 更高,如果同时实现 PriorityOrdered 或 Ordered 接口,则再按 order 值排序,值越小的优先级越高。

3、springBean是线程安全的吗?

结论: Bean是线程不安全的

Spring容器中的Bean是否线程安全,容器本身并没有提供对Bean的线程安全策略,因此可以说Spring的Bean本身不具备线程安全的特性。

如果Bean是无状态的,那么Bean则是线程安全的

如果Bean是有状态的,那么Bean就不是线程安全的

另外,Bean是不是线程安全,跟Bean的作用域没有关系,Bean的作用域只是表示Bean的生命周期范围,对于任何生命周期Bean都是一个对象,这个对象是不是线程安全的,还是得看Bean里的这个对象本身

4、Spring中的bean生命周期?

1.Bean容器找到配置文件中Spring Bean的定义。

2.Bean容器利用Java Reflection API创建一个Bean的实例。

3.如果涉及到一些属性值,利用set()方法设置一些属性值。

4.如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。

5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。

6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。

7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。

8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法。

9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。

10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。

11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法。

12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法。

13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。

5、Spring 框架中都用到了哪些设计模式?

1.工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;

2.单例模式:Bean默认为单例模式。

3.代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;

4.模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。观

5.察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。

6、@Autowired和@Resource之间的区别

@Autowired可用于:构造函数、成员变量、Setter方法

@Autowired和@Resource之间的区别

  • @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。
  • @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。

7、Spring支持的事务管理类型?

Spring支持两种类型的事务管理:

编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。

声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

8、你更倾向用那种事务管理类型?

大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。唯一不足地方是,最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。

9、Spring事务中有哪几种事务传播行为?

在TransactionDefinition接口中定义了八个表示事务传播行为的常量。

支持当前事务的情况:

PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。

不支持当前事务的情况:

PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。

PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。

其他情况:

PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。

10、Spring通知有哪些类型?

在AOP术语中,切面的工作被称为通知,实际上是程序执行时要通过SpringAOP框架触发的代码段。

Spring切面可以应用5种类型的通知:

1.前置通知(Before):在目标方法被调用之前调用通知功能;

2.后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;

3.返回通知(After-returning ):在目标方法成功执行之后调用通知;

4.异常通知(After-throwing):在目标方法抛出异常后调用通知;

5.环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

总结

本片文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java经典面试题汇总:Spring Boot

    目录 1. 什么是 Spring Boot? 2. 为什么要用 Spring Boot? 3. Spring Boot 核心配置文件是什么? 4. Spring Boot 提供了哪些常用的 Starter Project Options? 5. 如何快速构建一个Spring Boot项目? 6. Spring Boot默认的内置Web服务器是什么? 7. Spring Boot常用注解及其作用? 8. 如何使用配置文件通过 Spring Boot 配置特定环境的配置? 总结 1. 什么是 Spr

  • 吊打Java面试官!整理了一周的Spring面试大全(附答案)

    目录 Q1:什 么 是 spring? Q2:使 用 Spring 框 架 的 好 处 是 什 么 ? Q3:使 用 Spring 缺点是什么? Q4:IoC 是什么? Q5:IOC的优点是什么 Q6:IoC 容器初始化过程? Q7:依赖注⼊的实现方法有哪些? Q8:依赖注入的相关注解? Q9:依赖注入的过程? Q10:Bean 的生命周期? Q11:Bean 的作⽤范围? Q12:如何通过 XML ⽅式创建 Bean? Q13:Spring 有几种配置方式? Q14:如何用基于 XML 配置的

  • Java经典面试题汇总:Spring

    目录 1. 什么是Spring? 有哪些优点? 2. 什么是 AOP? 3. 什么是 IOC? 4. 什么是 DI? 5. Spring 有哪些核心模块? 6. Spring 常用的注入方式有哪些? 7. Spring 中的 Bean 是线程安全的吗? 8. Spring中Bean的作用域有哪些? 9. @Qualifier 注解 10. @Resource与@Autowired注解的区别? 11. Spring底层两种动态代理实现原理及区别? 12. Spring 事务实现方式有哪些? 13.

  • Java面试题冲刺第十八天--Spring框架3

    面试题1:Bean 的加载过程是怎样的? 我们知道, Spring 的工作流主要包括以下两个环节: 解析,读 xml 配置,扫描类文件,从配置或者注解中获取 Bean 的定义信息,注册一些扩展功能. 加载,通过解析完的定义信息获取 Bean 实例. 下面是跟踪了 getBean的调用链创建的流程图,为了能够很好地理解 Bean 加载流程,省略一些异常.日志和分支处理和一些特殊条件的判断. 从上面的流程图中,可以看到一个 Bean 加载主要会经历这么几个阶段(标绿内容): 获取 BeanName,

  • Java经典面试题汇总:Spring MVC

    目录 1. 什么是Spring MVC ? 2. Spring MVC 有哪些组件? 3. 说一下 Spring MVC 运行流程? 4. Spring MVC的优点: 5. @RequestMapping 的作用是什么? 6. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 7. SpringMVC常用的注解有哪些? 8. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 9. Spring MVC和Struts2的区别有哪些? 10. 怎么样在方法里面得到Re

  • 面试JAVA时,问到spring该怎么回答

    目录 Spring面试十连问 1.谈谈对IOC的理解? 2.多个AOP的顺序怎么定义 3.springBean是线程安全的吗? 4.Spring中的bean生命周期? 5.Spring 框架中都用到了哪些设计模式? 6.@Autowired和@Resource之间的区别 7.Spring支持的事务管理类型? 8.你更倾向用那种事务管理类型? 9.Spring事务中有哪几种事务传播行为? 10.Spring通知有哪些类型? 总结 Spring面试十连问 1.谈谈对IOC的理解? IOC,就是我们经

  • 面试必时必问的JVM 类加载机制详解

    目录 前言 正文 1.类加载的过程. 1)加载 2)验证 3)准备 4)解析 5)初始化 2.Java 虚拟机中有哪些类加载器? 1)启动类加载器(Bootstrap ClassLoader): 2)扩展类加载器(Extension ClassLoader): 3)应用程序类加载器(Application ClassLoader): 3.什么是双亲委派模型? 4.为什么使用双亲委派模式? 5.有哪些场景破坏了双亲委派模型? 6.为什么要破坏双亲委派模型? 7.如何破坏双亲委派模型? 8.Tomc

  • Java多线程面试题(面试官常问)

    进程和线程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是从一个进程从创建.运行到消亡的过程.在Java中,当我们启动main函数时其实就是启动了一个JVM的进程,而mian函数所在的线程就是这个进程中的一个线程,称为主线程. 线程是比进程更小的执行单位.一个进程在其执行的过程中可以产生多个线程.与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程都有自己的程序计数器.虚拟机和本地方法栈,所以系统在产生一个线程,或在各个线程之间切换工作是,

  • SpringBoot服务监控机制原理解析(面试官常问)

    前言 任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来说,监控都是必不可少的. 就目前而言,大部分微服务应用都是基于 SpringBoot 来构建,所以了解 SpringBoot 的监控特性是非常有必要的,而 SpringBoot 也提供了一些特性来帮助我们监控应用. 本文基于 SpringBoot 2.3.1.RELEASE 版本演示. SpringBoot 监控 SpringBoot 中的监控可以分为 H

  • java 使用memcached以及spring 配置memcached完整实例代码

    Memcached是一个高性能的分布式内存对象缓存系统,本文介绍了java 使用memcached以及spring 配置memcached完整实例代码,分享给大家 本文涉及以下内容: 1,要使用的jar包 2,java 使用memcached 3,spring 配置memcached 导入jar java_memcached-release_2.6.6.jar commons-pool-1.5.6.jar slf4j-api-1.6.1.jar slf4j-simple-1.6.1.jar 示例

  • 在Python程序员面试中被问的最多的10道题

    我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的一段代码: class A(object): def show(self): print 'base show' class B(A): def show(self): print 'derived s

  • Java中批处理框架spring batch详细介绍

    spring batch简介 spring batch是spring提供的一个数据处理框架.企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作. 这些业务运营包括: 无需用户交互即可最有效地处理大量信息的自动化,复杂处理. 这些操作通常包括基于时间的事件(例如月末计算,通知或通信). 在非常大的数据集中重复处理复杂业务规则的定期应用(例如,保险利益确定或费率调整). 集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中. 批处理用于每天为企业处

  • C++ const的使用及this指针常方法(面试最爱问的this指针)

    1. const的使用 const的使用有以下四种情况: const int* p int const *p int* const p const int* const p 我们可以通过以下图解来理解这四种情况const到底修饰的是谁: 当const在 " * " 的左边,则指向的值不能被修改 当const在 " * " 的右边,则自身不能被修改 2. this指针 2.1 前言(this指针的引出) 观察如下代码,我们会发现,Date类中有Display和SetD

  • Java 程序员掌握 Spring Boot非常有必要

    Spring Boot从天而降 Spring Boot是企业级开发的整体整合解决方案,在现在企业项目开发中使用非常普遍,Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热潮,给企业开发带来了巨大的变革,可以说现在是Java程序员到了必须学习SpringBoot的时候. Spring已经足够好了? Spring框架真的太好了,任何一个java开发用过之后都会像上瘾一样,爱不释手.会在遇到新问题的时候,或者找到某一个方法的时候,都会去看一下spring是不是已经有同类

  • 面试最常问的13种Vue修饰符

    目录 1.lazy 2.trim 3.number 4.stop 5.capture 6.self 7.once 8.prevent 9.native 10.left,right,middle 11.passive 12.camel 12.sync 13.keyCode 1.lazy lazy修饰符作用是,改变输入框的值时value不会改变,当光标离开输入框时,v-model绑定的值value才会改变 <input type="text" v-model.lazy="v

随机推荐