文档章节

几道Spring 面试题

职业搬砖20年
 职业搬砖20年
发布于 06/19 17:46
字数 1372
阅读 14
收藏 0
点赞 0
评论 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)的通知,如方法调用。
  • 这是最强大的一种通知类型。 
  • 环绕通知可以在方法调用前后完成自定义的行为。
  • 它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。

© 著作权归作者所有

共有 人打赏支持
职业搬砖20年
粉丝 18
博文 134
码字总数 71195
作品 0
南京
程序员
Spring Boot配置随机数

Spring Boot支持在系统加载的时候配置随机数。 添加config/random.properties文件,添加以下内容: 添加绑定类: 输出如下: 具体的生成细节可以参考Spring Boot的配置类: 推荐阅读 分享一套...

架构之路
2017/12/04
0
0
个人珍藏最全Spring Boot全套视频教程

Spring Boot是目前最火热的项目之一,Java必学Spring系列框架。 这是个人珍藏的Spring Boot各路讲解的全套系列视频,包括从入门到进阶再到实战,资料、笔记、代码各种资源应有尽有。现在分享...

架构之路
2017/12/19
0
7
Spring Boot集成Mybatis双数据源

这里用到了Spring Boot + Mybatis + DynamicDataSource配置动态双数据源,可以动态切换数据源实现数据库的读写分离。 添加依赖 加入Mybatis启动器,这里添加了Druid连接池、Oracle数据库驱动...

架构之路
2017/12/04
0
0
一条咸鱼的校招之路

一条咸鱼的校招之路 [TOC] 又是一年一度的秋招,作为某不知名211高校的菜鸟渣渣而言,想进一家靠谱点的大公司真是很艰难的。 这里写图片描述 梦想总是要有的,万一实现了呢?抱着试一试的心态...

窗边的扁豆
2017/10/01
0
0
Spring Boot配置加载顺序

如果加载的配置有重复的,它们的加载顺序是这样的,数字越小的优先级越高,即优先级高的覆盖优先级低的配置。 Devtools global settings properties on your home directory (~/.spring-boot...

架构之路
2017/12/04
0
0
Git仓库操作命令

创建仓库 在当前目录执行,会生成目录文件,这个和SVN一致。 提交到仓库 :表示提交描述,必须要填。 添加到远端仓库 推送到远端仓库 克隆仓库 直接从远端把代码克隆下来。 仓库状态 仓库更新...

架构之路
2017/11/27
0
0
Git分支及标签管理

添加分支 git branch 切换分支 git checkout 添加分支并切换 git checkout -b 查看所有分支 git branch 删除分支 git branch -d 合并分支 合并到主干。 git merge 提交分支 git push origin ...

架构之路
2017/11/27
0
0
高级Java技术微信群正式开通

image.png 今天,我们为工作3年以上的Java码农朋友,建立了一个高端Java技术微信交流群平台。微信群用户可以无条件获取本公众号所有分享的福利。 为了确保高端群的真实性和群人员整体质量,每...

架构之路
2017/12/22
0
2
免费分享Dubbo原理解析视频教程

Dubbo是目前最火热的分布式框架项目之一,Java程序员必熟悉之框架。 这是微信群友分享的Dubbo原理解析视频教程,真是Dubbo上手到精通干货。现在分享出来。 以下为教程预览截图。 获取上以视频...

架构之路
2017/12/28
0
1
Git文件操作命令

添加文件 git add 添加指定文件: 添加所有文件: 取消添加文件 git reset HEAD -- filename 这样Test.java将不会被提交到仓库中。 删除文件 git rm [--cached] fileName 默认会取消并删除文...

架构之路
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring配置xml启动报错 Connot find 'beans'

1.我们先看一下spring的原始配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc......

江湖鱼大虾
1分钟前
0
0
与女儿谈商业模式 (4):戴尔的成功秘诀

分类:与女儿谈商业模式 | 标签: 戴尔 经济学 陈志武 2007-05-15 10:26阅读(7434)评论(36)   2007年5月《创富志》与“女儿谈商业模式”专栏 (之四)   戴尔的成功秘诀   陈志武   ...

祖冲之
11分钟前
0
0
www.w3.org被qiang导致logback报错:Connect reset

web项目部署到tomcat后,web项目中的logback不能运行,报错信息如下: Reported exception: ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while parsing xml file......

浮躁的码农
25分钟前
0
0
JDeveloper中文乱码解决

全局设置字体; 全局设置环境编码; 项目设置编译器环境编码。

wffger
53分钟前
2
0
MySQL主从介绍 , 准备工作,配置主,配置从, 测试主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

TaoXu
今天
2
0
线性代数学习总结

亭子happy
今天
1
0
Java8:Lambda表达式增强版Comparator和排序

1、概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。 这篇文章是...

孟飞阳
今天
0
0
从架构到组件,深挖istio如何连接、管理和保护微服务2.0?

近几年我一直从事于微服务系统的设计以及实现方面的工作,属于微服务架构一线实践者。之前做过一些单体系统的微服务改造,在微服务拆分、治理等方面都有一定的经验。 本人比较特殊一点的经历...

xiaomin0322
今天
1
0
基于vue的h5文件切片上传(获取文件md5,实现秒传、进度条实现)

template <button @click="file"></button><label ref="upload" style="position: relative;"> <input type="file" @change="selectFile" style="position: abs......

hkaikai
今天
2
0
Spring Boot 2.0 项目实现自同步AD域账号

在通过Spring Boot的自动化装配功能及JDK自带的LDAP模块,可通过如下几个简单步骤实现业务系统自动同步AD域账号功能。 1. Java自带ldap搜索域账号信息核心代码: try { LdapContext ctx...

B超
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部