Spring-面试题

1 什么是Spring?

Spring框架是一个开源的具有容器性质的轻量级框架。主要有三大特点:容器IOC(控制反转)AOP(面向切面编程)

2.Spring三大特点?

  1. 容器
    Spring框架是一个容器,能够管理项目中的所有对象。

  2. IOC
    IOC英文“Inverse Of Controll”,意为控制反转,控制指IOC容器直接控制创建对象,反转指角色反转,本来是由程序员去创建对象,反转给了IOC容器去创建对象。

DI英语“Dependency Injection”,意为依赖注入,需要有IOC环境,在Spring创建Bean对象时,动态的将依赖对象注入到Bean对象中去。依赖注入最大的好处就是解耦合。
其中DI注入方式有:
① Set注入
② 构造器注入
③ 静态工厂注入
④ 实例化工厂注入

  1. AOP
    AOP英文名为Aspect Oriented Programming,意为面向切面编程,把那些不是特别重要的流程做成一个切面,就是把之前的纵向逻辑横向抽取出来,目的是你写代码的时候只需要考虑主流程, 不需要去考虑其他不是特别重要的流程。日志就是最好的体现,AOP的实现原理是基于动态代理来实现。

AOP的动态代理有两种:
1.JDK动态代理,并须要有接口
2.CGLIB动态代码,这个有接口和没接口都可以实现。

那你能说一下Spring AOP 动态代理是怎样实现的?

3 Spring切面可以应用5种类型的通知,哪5种?

前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义

4. 谈谈你对Spring容器中Bean标签的理解?

Bean标签用来定义对象。
Bean标签常见的属性有以下几个:
name属性:给被管理的对象起个名称,获得对象时要根据该名称来获得。
class属性:被管理对象的完整类名。
scope属性:用来指定对象的作用域

scope指定对象的作用范围
singleton :默认值,单例的.
prototype :多例的.
request :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.
session :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.
globalSession :WEB项目中,应用在Portlet环境.如果没有Portlet环境那么globalSession相当于session.

5. 用注解将对象注册到Spring容器当中,有几种注解方式?它们有什么区别吗?

答:5种。分别是:@Respository、@Service、@Controller、@Component、@Configuration+@Bean

  1. @Repository:推荐给数据库层(持久化层,dao层)的组件添加这个注解。
  2. @Service:业务逻辑。推荐业务逻辑层的组件添加这个注解。
  3. @Controller:控制器。推荐给控制器层的组件加这个注解。
  4. @Component:给不属于以上几层的组件添加这个注解。
  5. @Bean一般和@Configuration一起使用。@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被扫描,并将方法返回的对象注册到Spring容器中。

6.Spring中的事务管理。

事务就是对一系列的数据库操作。(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。现实世界中最常见的事务例子可能就是转账了。

7.什么是事务传播行为?

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行
例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。

8.Spring中定义事务传播行为的属性有几种?

传播行为?7种
在这里插入图片描述

Spring的API设计很不错,基本上根据英文翻译就能知道作用:

Required:必须的。说明必须要有事物,没有就新建事物。
supports:支持。说明仅仅是支持事务,没有事务就非事务方式执行。
mandatory:强制的。说明一定要有事务,没有事务就抛出异常。
required_new:必须新建事物。如果当前存在事物就挂起。
not_supported:不支持事物,如果存在事物就挂起。
never:绝不允许有事务。如果存在事物就抛出异常

9.spring用到了哪些设计模式?

工厂模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
单例模式 : bean的作用域有singleton
原型模式:bean的作用域有prototype
代理模式 : Spring AOP 功能的实现。
装饰器模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。
观察者模式: 各种事件监听器(ApplicationListener),是观察者模式的典型应用
模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。

你至少要有个大体的印象,如:BeanFactory和ApplicationContext应用了工厂模式。在 Bean 的创建中,Spring 也为不同 scope 定义的对象,提供了单例和原型等模式实现。AOP 领域则是使用了代理模式、装饰器模式、适配器模式等。各种事件监听器(ApplicationListener),是观察者模式的典型应用。类似 JdbcTemplate 等则是应用了模板方法模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值