《剑指Java面试-Offer直通车》--Java框架Spring

目录

IOC

一、IOC原理

依赖注入的方式

依赖倒置原则、IOC、DI和Spring IOC容器的关系

二、Spring IOC的应用

spring IOC支持的功能

spring IOC容器的核心接口

getBean方法的代码逻辑

Spring Bean的作用域

Spring Bean的生命周期

AOP

一、AOP的介绍和使用

AOP的三种织入方式

AOP的主要名词概念

Advice的种类

SpringAOP怎么实现事务

二、AOP的原理

AOP的实现:JdkProxy和Cglib

代理模式:接口+真实实现类+代理类

其他

Spring注解@Resource和@Autowired区别

Spring中的设计模式

Spring和SpringBoot比较

MyBatis中#和$区别

MyBatis和Hibernate区别


IOC

一、IOC原理

IOC(Inversion of Control):控制反转,是Spring Core最核心部分。

需要先了解依赖注入DI(Dependency Inversion):把底层类作为参数传递给上层类,实现上层对下层的“控制”。

IOC的另外一种实现方式:依赖查找DL(Dependency Lookup),Apache Avalon和EJB就是利用DL实现的IOC。DL相对DI而言是更为主动的方法,在需要的时候通过调用框架提供的方法来获取对象。获取时需要通过提供相关的配置文件路径、key等信息来确定获取对象的状态。DL已经被抛弃,因为它需要用户自己去使用API查找资源和组装对象,有侵入性。DI是当今IOC的主流实现方式。

  • 依赖注入的方式

Set注入:实现特定属性的public setter()方法来让IOC容器调用注入所依赖类型的对象

接口注入:实现特定的接口来让IOC容器注入所依赖类型的对象

构造函数注入:实现特定参数的构造函数,在创建对象时让IOC注入所依赖类型的对象

注解注入:通过Java注解机制,让IOC容器注入所依赖类型的对象。例如Spring框架里的Autowire标签都是能够实现注解功能的

  • 依赖倒置原则、IOC、DI和Spring IOC容器的关系

依赖倒置原则是一种思想,大致含义是高层模块不应该依赖低层模块,两者都应该依赖其抽象。

有了依赖倒置原则的指导才有了IOC的思路,实现IOC思路离不开DI依赖注入的支撑。spring框架基于IOC提出了容器的概念,对于IOC来说,最重要的就是容器,容器管理着Bean的生命周期,控制着Bean的依赖注入。

因为采用依赖注入,在初始化过程中会写大量new,容器解决这个问题。容器自动对代码进行初始化,只需要维护一个Configuration(可以是xml,也可以是一段代码)而不用每次初始化时都要亲手去写一大段初始化的代码。IoC Container的第二个好处是我们在创建实例的时候不需要了解其中的细节。从最上层开始往下找依赖关系,到达最底层之后再往上一步一步new,类似深度遍历。

参考:Spring IoC和AOP的实现原理解析SpringIOC实现原理

 

二、Spring IOC的应用

spring启动时读取应用程序提供的bean配置信息,并在Spring容器中生成一份相应的bean配置表,根据注册表去实例化bean,装配好bean之间的依赖关系,为上层提供准备就绪的运行环境。spring提供配置文件描述bean以及bean之间的依赖关系,利用Java语言的反射功能实例化bean并建立bean之间的依赖关系。

  • spring IOC支持的功能

依赖注入、依赖检查、自动装配、支持集合、指定初始化方法和销毁方法、支持回调方法(需要实现Spring接口,这种实现方式带有侵入性)

  • spring IOC容器的核心接口

BeanFactory、ApplicationContext

BeanDefinition主要用来描述Bean的定义,Spring容器在启动的时候会将xml或者注解里bean的定义解析成spring内部的BeanDefinition。

BeanDefinitionRegistry接口提供向容器手工注册BeanDefinition对象的方法。

BeanFactory是Spring框架最核心的接口,提供IOC的配置机制;包含Bean的各种定义,便于实例化Bean;建立Bean之间的依赖关系;Bean生命周期的控制。

BeanFactory的体系结构&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值