面试专题_spring+mybatis

1.什么是Spring?Spring有哪些核心功能?

Spring框架是一个开源的J2EE应用程序框架, 由RodJohnson创建发起,是针对bean的生命周期进行管理的轻量级容器
Spring提供了 IOC , AOP 以及 WebMVC等主要功能
Spring可以单独应用于构筑应用程序,也可以和Struts , Webwork , Tapestry 等众多WEB框架组合使用
Spring框架主要由七部分组成, 分别是 Spring Core , Spring AOP , Spring ORM , Spring DAO , Spring Context , Spring Web 和 Spring Web MVC

框架特征
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
控制反转——SpringIOC就是控制反转,我们将对象的依赖关系交给Spring容器来进行管理。
容器通过DI依赖注入的方式来使用创建的Bean对象。
面向切面——切面编程是将原有业务中共通的处理逻辑抽离出来,进行独立封装,然后通过配置作用到原有传统的业务处理方法上。例如我们常常用来做事务处理,日志处理,异常处理,权限处理等。
容器——Spring包含并且管理应用对象的配置和生命周期, 在这个意义上它是一种容器, 你可以配置你的每个Bean如何被创建(基于一个可配置原型),你的bean可以创建一个的单独的实例或者每次需要时候都生成一个新的实例(以及他们是如何相关联的).
框架——Spring 可以将简单的组件配置, 组合成为复杂的应用. 在Spring中, 应用对象被声明式地组合,典型地是在一个XML文件里. Spring也提供了很多基础功能(事务管理,持久化框架集成等等), 将应用逻辑的开发留给了我们自己.
MVC——Spring的作用是整合, 但不仅仅限于整合, Spring框架可以被看作是一个企业解决方案级别的框架

  • 客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发
    控制器调用一个用于映射的类HandlerMapping, 该类用于将请求映射到对应的处理器来处理请求HandlerMapping将请求映射到对应的处理器Controller(相当于Action)
    在Spring当中如果写一些处理器组件,一半实现Controller接口,在Controller中就可以调用一些Service或者DAO来进行数据操作ModelAndView用于存放DAO中去除的数据,还可以存放响应视图的一些数据.
    如果想将处理结果返回给用户,那么在Spring框架中还提供了一个视图组件ViewResolver,该组件根据Controller返回的标示,找到对应的视图,将响应response返回给用户

Spring的优点:

  1. 低浸入式设计,代码污染极低
  2. 独立于各种应用服务器, 基于Spring框架的应用,可以真正实现Write Once , Run Anywhere的承诺
  3. Spring的DI机制降低了业务对象替换的复杂性, 提高了组件之间的解耦
  4. Spring的AOP支持允许将一些通用任务如安全,事务,日志等进行集中式管理, 从而提供了更好的复用
  5. Spring的ORM 和DAO提供了与第三方持久层框架的良好整合, 并简化了底层的数据库访问
  6. Spring并不强制应用完全依赖于Spring, 开发者可以自由选用Spring框架的部分或者全部

2. 什么是SpringIOC?

一、Ioc-Inversion of Control, 即"控制反转", 不是什么技术, 而是一种设计思想.
在Java开发中,Ioc 意味着将你设计好的对象交给容器控制, 而不是传统的在你的对象内部直接控制

  • 理解IOC , 要理解"谁控制谁,控制什么,为何是反转,那些方面反转了"
    谁控制谁,控制什么: IOC容器控制了对象,主要控制了外部资源获取
    为何反转,体现在哪里: 反转在于容器帮我们查找以及注入依赖对象,对象只是被动的接受依赖对象,体现在依赖对象的获取被反转了.

二、DI-Dependency Injection 即"依赖注入"
组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中.
依赖注入的目的并非为软件系统带来更多的功能,而是为了提升组件重用的频率,并为系统搭建一个灵活,可扩展的平台.

  • 理解DI , 要理解"谁依赖谁,为什么需要依赖,谁注入谁,注入了什么"
    谁依赖于谁 应用程序依赖于IOC容器
    为什么要依赖 应用程序需要IOC容器来提供对象需要的外部资源
    谁注入谁 IOC容器注入应用程序某个对象,应用程序依赖的对象
    注入了什么 注入某个对象所需要的外部资源(包括对象,资源,常量数据)

三、DI注入的三种常见注入方式:

  • 基于注解注入
    注入方式非常简单:加上@Autowired注解,加入要注入的字段,即可完成。
    注解方式注册bean
    在以前的开发中,我们主要使用四种注解bean,每种注解可以任意使用,语义上有所差异:

    1. @Component:可以用于注册所有的bean
    2. @Repository:主要用于注册dao层的bean
    3. @Controller:主要用于注册控制层的bean
    4. @Service:主要用于注册服务层的bean

    随着springboot的流行,@Bean 注解也逐渐被使用起来,Spring的@Bean 注解用于告诉方法,产生 一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。

    注解方式依赖注入(主要有两种):

    1. @Autowired注解:是Spring框架提供的注解,可以通过构造器注入,也可以通过set方法注入,是基于类型注入的(byType)。
    2. @Resource注解:是JDK提供的一个注解,只是Spring框架也能识别它,它只能通过set方法注入,是基于bean名称注入的(byName)。
  • 构造器注入

  • setter注入

IOC和DI 就是同一个概念的不同的角度的描述,相对IOC而言,DI明确描述了"被注入对象依赖IOC容器配置依赖对象"

3. BeanFactory和FactoryBean有什么区别?

BeanFactory
BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIOC容器的核心接口,它定义了getBean()、containsBean()等管理Bean等通用方法。

  • 使用场景:
    从IOC容器中获取Bean(ByName or ByType)
    检索IOC容器中是否包含指定的Bean
    判断Bean是否为单例

FactoryBean
首先它是一个Bean,但又不仅仅是一个Bean。它是一个能生产或修饰对象生成的工厂Bean, 类似于设计模式中的工厂模式和装饰器模式。它能在需要的时候生产一个对象,且不仅仅限于它自身,它能返回任何Bean的实例
FactoryBean表现的是一个工厂的职责。 即一个Bean A如果实现了FactoryBean接口,那么A就变成了一个工厂,根据A的名称获取到的实际上是工厂调用getObject()返回的对象,而不是A本身,如果要获取工厂A自身的实例,那么需要在名称前面加上’&'符号。
getObject(‘name’)返回工厂中的实例
getObject(’&name’)返回工厂本身的实例

  • 使用场景:
    FactoryBean在Spring中最为典型的一个应用就是用来创建AOP的代理对象。

区别
它们两个都是工厂,但FactoryBean本质上还是一个Bean,也归BeanFactory管理
BeanFactory是Spring容器的顶层接口,FactoryBean更类似于用户自定义的工厂接口

4. Spring当中的BeanPostProcessor是什么?

BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后会调用BeanPostProcessor中定义的两个方法)
其中postProcessBeforeInitialization 方法会在每一个bean对象的初始化方法调用之前回调;
postProcessAfterInitialization方法会在每个bean对象的初始化方法调用之后被回调

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值