3分钟永不忘记Ioc,5分钟永不忘记AOP

面试官:谈谈你对IoC和AOP的理解吧

答:

IoC客套部分

What:
控制反转(Inversion of Control,缩写为IoC),将创建类的控制权从程序交给IoC容器。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

Why:
原始方法当A依赖于B,B依赖于C,需要A时,必须先new一个C,然后new一个B,最后才能成功new一个A。 如果没有IOC,在spring中,调用controller的方法,很有可能需要先new一个dao,再new一个service,最后才能使用controller的方法。而且迭代和维护起来耗时耗力。
有了它,解耦,利于维护,当需要更换dao的时候,我们只需要在配置文件中更换dao的实现类,完全不会破坏到之前的代码。上层现在不需要知道下层是如何创建的。

How:
一般IoC容器是启动时根据依赖关系将所有的普通对象全部创建出来并放在容器中,是常驻内存的,除非配置为启动时配置为懒加载,不创建对象。一旦启动完成,几乎所有用到的对象都已经创建完毕,使用时直接从容器中拿就是了,效率非常高。

缺点:
1.对内存的要求比较高,并且在启动时比较慢
2.创建对象的步骤不直观

IoC永久记忆部分

What:

原始类的创建模式就像做菜,你需要原材料:

  • 食材:米油盐酱醋,各种菜,肉类…
  • 器材:热源、锅、碗筷…
  • 方法:操控热源的方法,食材的处理方法,刀具的使用,碗筷的使用…
  • 这些都需要自己控制,很累,很麻烦
    而IoC容器就像外卖,只要给了资源,所有需要的一切自动注入,直达家门。

Why:
老子掏钱省力了。
我们想换一家吃的时候直接选择换一家就行,需要换菜品的时候也是直接换就行。
我们不需要知道如何做菜,如何送来,只要到了就行。
How:
也就是说在有外卖机构前,商家已经存在才行,注册后外卖机构直接派单即可。

缺点:
1.城市要有地,商家要有实体店。
2.我们并不清楚菜到我们门口的原理。

面试官:我擦,说的挺好的,那AOP呢?

答:

AOP简单来说

所有饭店想在网上赚钱,就需要注册到外卖机构,这就是AOP思想,统一控制。

别的我们下回继续

(授人以鱼不如授人以渔,理解问题时可以用类比联想)

猜你喜欢

转载自blog.csdn.net/pz641/article/details/106629061