Spring

 目录

1.Spring 是什么?

2.spring的优点?

3.Spring 的 IOC 理解?

4.DI依赖注入?

5.Spring 的 AOP 理解?

6.BeanFactory 和ApplicationContext 有什么区别?

7.请解释 Spring Bean 的生命周期?

8.spring是如何解决循环依赖的?

9.BeanFactory和FactoryBean的区别?

10.解释 Spring 支持的几种 bean 的作用域。

11.Spring 框架中都用到了哪些设计模式?

12.事务不管用?

13.解释一下 Spring AOP 里面的几个名词

14.Spring 通知有哪些类型?

15. spring框架中Bean是线程安全的吗?

16.Spring Boot、Spring MVC 和 Spring 有什么区别


1.Spring 是什么?

是一个ioc和aop框架。

2.spring的优点?

spring属于低侵入式设计,代码的污染极低
spring对于主流的应用框架提供了集成支持
有很多的注解。简化了使用api难度。
降低了组件之间的耦合性 ,实现了软件各层之间的解耦 
容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能

3.Spring 的 IOC 理解?

IOC翻译过来就是控制反转,那什么是控制反转,以前我们都是自己new 对象,但是现在不一样了,我们把这些对象都交给了容器管理
让容器去创建对象,去维护对象和对象之间的关系。控制权交给了容器,这就叫控制反转。

4.DI依赖注入?

就是程序在运行期间动态根据属性所需要的类型为其赋值。

5.Spring 的 AOP 理解?

AOP 面向切面, 就是我们把非业务抽取出来,定义成一个切面类,在需要的地方加入响应的切入点表达式就可以了。
可以让我们更加专注于逻辑的处理。一般用来做事务,日志,权限认证。底层是用的动态代理的方式。

6.BeanFactory 和ApplicationContext 有什么区别?

BeanFactory和ApplicationContext两个都是spring中的核心接口。他们两个都是spring中的容器,ApplicationContext是BeanFactory的一个子接口。
BeanFactory是它容器的最顶层的一个接口。它包含bean的一些定义,控制bean的生命周期。维护bean之间的依赖。
ApplicationContext在BeanFactory的基础上扩展了一些功能。例如支持国际化。提供在监听器中注册 bean 的事件等。④同时加载多个配置文件。
BeanFactory是采用的延迟加载的方式,只有使用某一个bean的时候才会将其实例化,这样可能我们不会及时发现他在初始化过程中可能会出现的问题。
ApplicationContext 是在启动过程中直接在容器中创建所需要的所有对象,这样可以提前找到错误。

7.请解释 Spring Bean 的生命周期?

首先会读取到 解析得到BeanDefinition 然后进行实例化的过程,然后会给属性赋值,进行初始化,然后会执行一些实现了Aware的接口,
然后会执行前置增强器(postProcessBeforeInitialization)执行初始化的init方法,之后执行后置增强器(postProcessAfterInitialization)
使用bean,最后会执行销毁方法。

8.spring是如何解决循环依赖的?

提前暴露,就是把可以得到的对象的函数式接口放到三级缓存中,这个函数式接口(ObjectFactory)里面有一个方法getObject()
可以获取实例化完成但未初始化的半成品对象,如果产生循环依赖,就可以从这个方法中获取半成品对象进行属性的赋值。

9.BeanFactory和FactoryBean的区别?

BeanFactory是个工厂,FactoryBean是个Bean对象,它也是spring容器管理的。
但对FactoryBean而言,这个Bean不是简单的Bean,而是修饰对象生成的Bean。


10.解释 Spring 支持的几种 bean 的作用域。

(1) singleton:默认,每个容器中只有一个 bean 的实例,单例的模式由 BeanFactory 自身来维护。 
(2) prototype:为每一个 bean 请求提供一个实例。
(3) request:为每一次请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收。
(4) session:与 request 范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean 会随之失效。 
(5) global-session:全局作用域

11.Spring 框架中都用到了哪些设计模式?

(1) 工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;
(2) 单例模式:Bean 默认为单例模式。
(3) 代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 动态代理
(4) 观察者模式:spring中监听器就是这种体现。
(5) 适配器模式: springMVC中适配器。
  (6)  装饰着模式:factoryBean就是这样一个体现
  (7)  模板模式: redisTemplate.

12.事务不管用?

发生自调用,类里面使用this调用本类的方法(this通常省略),此时这个this对象不是代理类,而是UserService对象本身,
异常被吃掉,事务不会回滚(或者抛出的异常没有被定义,默认为RuntimeException)
没有被spring管理
数据库不支持事务。
不是pulic修饰的。

13.解释一下 Spring AOP 里面的几个名词

(1) 切面(Aspect):被抽取的公共模块,可能会横切多个对象。在 Spring AOP 中,切面可以使用通用类(基于模式的风格) 或者在普通类中 以 @AspectJ 注解来实现
(2) 连接点(Join point):指方法,在 Spring AOP 中,一个连接点 总 是 代表一个方法的执行。
(3) 通知(Advice):  在切面的某个特定的连接点(Join point)上执行 的动作。通知有各种类型,其中包括“around”.“before”和“after”等通知。 许多 AOP 框架,包括 Spring,都是以拦截器做通知模型, 并维护一个以连接 点为中心的拦截器链。
(4) 切入点(Pointcut):切入点是指 我们要对哪些 Join point 进行拦 截的定义。通过切入点表达式,指定拦截的方法,比如指定拦截 add*.search*。

14.Spring 通知有哪些类型?

(1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这 个通知不能阻止连接点前的执行(除非它抛出一个异常)。
(2)后置通知(After returning advice):在某连接点(join point)正常完成后 执行的通知:例如,一个方法没有抛出任何异常,正常返回。
  (3)异常通知(After throwing advice):在方法抛出异常退出时执行的通知。 
  (4)最终 通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是 正常返回还是异常退出)。 
  (5) 环绕通知(Around Advice):包围一个连接点(join point)的通知,如方法 调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为它 也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。  环绕通知是最常用的一种通知类型。

15. spring框架中Bean是线程安全的吗?

spring中并没有对单例的bean做线程安全的处理。 但是实际中我们的service和dao的对象中并没有可变的状态嘛,所以从某种程度来看是线程安全的
如果是有多种状态的话,第一种方式是使用单例变成多例的方式,
第二种是使用ThreadLocal 进行处理,解决线程安全问题 ThreadLocal是为每一个线程保证一个副本变量,每一个线程操纵自己的副本变量。

16.Spring Boot、Spring MVC 和 Spring 有什么区别

spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等

springmvc是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术生成视图展现给前端

springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值