面试题之Spring工作原理

一、简介

Spring框架核心主要有两个:IOC和AOP。

(一)、IOC容器

IOC:控制反转,我们想实现一个功能,类A有可能调用到很多其他的接口,比如类B、类C中的方法,为了能调用别的类的方法,首先得取得这个类的实例,即在类A中new一个类B、再new一个类C,也就是说调用者负责创建被调用者的实例。这样的话,会造成类A中越来越臃肿,越来越不好管理;类B、类C需要不断的创建。

引入Spring的IOC容器之后,我们将创建对象的权利以及维护各个类之间的依赖关系交给Spring容器来管理,也就是说本来是类A控制这些实例的创建,现在交由Spring框架了,看起来就像是控制反转(IOC).有了IOC容器,让一个对象的创建不用new了,可以自动的生产(反射机制).

IOC还有一个名词,就是 DI(Dependency Injection依赖注入),DI其实是IOC的实现方式。类A依赖类B、类C,现在三个类都已经交给Spring管理了(控制反转),类A需要使用到类B和类C的实例对象,这就用到了依赖注入,Spring会自动注入所依赖的Bean对象。

常见的依赖注入的方式有三种:

  • setter方法注入
  • 构造器注入
  • 注解注入(@AutoWired)

IOC主要利用到反射机制,获取类的字节码对象,通过newInstance()方法创建对象,然后再放入Spring容器中进行管理。

//根据类的全限定名获取Class对象
Class<?> clz = Class.forName(classStr);

//实例化对象
Object obj = clz.newInstance();

//通过反射获取需要执行的方法,第一个参数是方法名,第二个参数是方法参数类型
Method setter = clz.getMethod(setterName, bean.getClass());

//调用方法  调用invoke()方法
public Object invoke(Object obj, Object... args){...}
setter.invoke(obj, bean); 

(二)、AOP

AOP :面向切面编程,指的是在运行期动态增强某些方法的功能,如:增加操作日志,增加事务等。这些日志啊,事务啊与业务逻辑之间的关系没有直接的关系,于是我们可以将他们抽离出来,在特定的位置横切到方法的业务逻辑前后等位置,达到增强业务逻辑方法的功能。

发布了197 篇原创文章 · 获赞 86 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/103961684