文档章节

几道Spring 面试题

Java搬砖工程师
 Java搬砖工程师
发布于 06/19 17:46
字数 1372
阅读 22
收藏 0

1、BeanFactory 接口和 ApplicationContext 接口有什么区别?

  • ApplicationContext 接口继承BeanFactory接口
  • Spring核心工厂是BeanFactory
  • BeanFactory采取延迟加载,第一次getBean时才会初始化Bean
  • ApplicationContext是会在加载配置文件时初始化Bean
  • ApplicationContext是对BeanFactory扩展
  • 开发中基本都在使用ApplicationContext, web项目使用WebApplicationContext ,很少用到BeanFactory

BeanFactory类结构体系:

  • BeanFactory接口及其子类定义了Spring IoC容器体系结构
  • BeanFactory体系非常的庞大和复杂
  • 要理解Spring IoC,需要先理清BeanFactory的继承机构

ApplicationContext的结构体系:

  • ApplicationContext接口是一个BeanFactory基础上封装了更多功能的
  • Spring中最为常用的IoC容器,其包含两个子接口:ConfigurableApplicationContext、WebApplicationContext

容器是spring的核心,使IoC管理所有和组件

spring的两种容器:   a、BeanFactoy
                                 b、ApplicationContext应用上下文

ApplicationContext:

                         a、提供文本信息解析,支持I18N
                         b、提供载入文件资源的通用方法
                         c、向注册为监听器的Bean发送事件
                         d、ApplicationContext接口扩展BeanFactory接口
                         e、ApplicationContext提供附加功能

ApplicationContext的三个实现类:

                                     a、ClassPathXmlApplication:把上下文文件当成类路径资源
                                     b、FileSystemXmlApplication:从文件系统中的XML文件载入上下文定义信息

                                     c、XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息

2、spring配置bean实例化有哪些方式?

  • 适合场景:

3、Spring Bean 作用域

  • singleton
  • prototype:根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用 singleton作用域
  • request
  • session
  • global session:该作用域仅在基于 web的Spring ApplicationContext情形下有效

4、Bean 的三中注入方式:

 

spring支持构造器注入和setter方法注入

    构造器注入,通过 <constructor-arg> 元素完成注入

    setter方法注入, 通过<property> 元素完成注入【开发中常用方式】

5、Spring AOP里面的几个名词

切面(Aspect):

  • 一个关注点的模块化,这个关注点可能会横切多个对象,在普通类中以 @Aspect 注解(@AspectJ风格)来实现

连接点(Joinpoint)(可以被拦截的方法):

  • 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。
  • 在Spring AOP中,一个连接点 总是 代表一个方法的执行。
  • 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息

通知(Advice):

  • 在切面的某个特定的连接点(Joinpoint)上执行的动作。
  • 通知有各种类型,其中包括“around”、“before”和“after”等通知。 
  • 许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。

切入点(Pointcut):

  • 匹配连接点(Joinpoint)的断言。
  • 通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 
  • 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

引入(Introduction):(也被称为内部类型声明(inter-type declaration))。

  • 声明额外的方法或者某个类型的字段。 
  • Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。
  • 例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。

目标对象(Target Object): 

  • 被一个或者多个切面(aspect)所通知(advise)的对象。
  • 也有人把它叫做 被通知(advised) 对象。 
  • 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。

AOP代理(AOP Proxy): 

  • AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。
  •  在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 
  • 注意:Spring 2.0最新引入的基于模式(schema-based)风格和@AspectJ注解风格的切面声明,
  • 对于使用这些风格的用户来说,代理的创建是透明的。

织入(Weaving):

  • 把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。
  •  这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。
  •  Spring和其他纯Java AOP框架一样,在运行时完成织入。

6、通知有哪些类型?

前置通知(Before advice):

  • 在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。

返回后通知(After returning advice):

  • 在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 

抛出异常后通知(After throwing advice):

  • 在方法抛出异常退出时执行的通知。 

后通知(After (finally) advice):

  • 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 

环绕通知(Around Advice):

  • 包围一个连接点(join point)的通知,如方法调用。
  • 这是最强大的一种通知类型。 
  • 环绕通知可以在方法调用前后完成自定义的行为。
  • 它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。

© 著作权归作者所有

共有 人打赏支持
Java搬砖工程师
粉丝 26
博文 260
码字总数 166188
作品 0
南京
程序员
私信 提问
金九银十,史上最强 Java 面试题整理。

以下会重新整理所有 Java 系列面试题答案、及各大互联网公司的面试经验,会从以下几个方面汇总,本文会长期更新。 Java 面试篇 史上最全 Java 面试题,带全部答案 史上最全 69 道 Spring 面试...

Java技术栈
09/13
0
0
吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人!

面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望。 下面,我给大家总结下有...

Java技术栈
10/15
0
0
神奇,教你用随机数打印hello world

下面是一段随机数程序。 每次都会输出:hello world,这是为什么呢?? Random构造函数,参数seed是初始种子,相同的种子每次产生的随机数都一样,所以无论怎么随机,构造出来的随机数都一样...

java技术栈
2017/11/14
0
0
jmap, jhat, jvisualvm:java堆内存对象分析利器

jmap -help 查看命令用法。 jmap -heap 查看堆使用情况。 jmap -dump导出堆对象文件进行内存分析。 jhat -J-Xmx512m -port 8888 1136.txt 命令生成分析报告,可通过http访问。 访问http://lo...

java技术栈
2017/11/14
0
0
Tomcat集群session复制与Oracle的坑。。

问题描述 公司某个系统使用了tomcat自带的集群session复制功能,然后后报了一个oracle驱动包里面的连接不能被序列化的异常。 解决方案 看到这个问题,首先检查整个系统里面的代码有没有用到T...

java技术栈
2017/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
16分钟前
10
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
18分钟前
0
0
技术工坊|区块链中的p2p网络(上海)

区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?11月28日,第29期技术工...

HiBlock
24分钟前
1
0
MySQL性能优化之char、varchar、text的区别

在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢? 参考下面这个表结构: 1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。 ...

hansonwong
27分钟前
0
0
并发编程系列:4大并发工具类的功能、原理、以及应用场景

一:并发工具包 1.并发工具类 提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。 2.并发容器 提供各种线程安全...

游人未归
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部