IOC、AOP思想的理解
什么是IOC
IOC,中文名为控制反转,是将Java的bean对象存储在容器中,当需要使用时,通过名字获取该对象。而不是通过new关键字去创建。
下面用一张图来说明普通场景和IOC场景的Bean对象调用的大致过程
普通场景不用说,大家都理解。IOC这种场景A如何获取到B呢?那这就牵出了一个我们熟悉的另一个词DI(依赖注入)。
IOC和DI说的其实是同一个事情,只是站在的角度不同:
IOC站在对象的角度,将对象的实例化反转到容器中。
DI站在容器的角度,当对象要被调用时通过依赖注入的方式将对象注入到所依赖的地方
那么使用IOC有什么好处呢?
解耦,便于维护和修改。
举个例子:
我们项目中有一个接口UserService,它当前有一个实现类UserServiceImpl01,我们在UserController中使用这个实现类。
普通场景 我们在Controller中直接实例化 UserService userService = new UserServiceImpl01();
ioc容器 我们在Controller中使用UserService userService;
并打上@AutoWired注解。在Service的实现类上打上@Service注解即可
现在出现新的需求,开发了UserServiceImpl02(),需要所有的Service接口去实现UserServiceImpl02()。
普通场景 我们需要修改代码UserService userService = new UserServiceImpl02();
ioc容器 将Service实现类的注解@Service打在正确的类上就可以完成代码的修改,是不是很方便。
当依赖UserService的类越来越多时,ioc的优势体现的也愈来愈明显。
什么是AOP
AOP,中文译为面向切面编程,主要表现为将业务代码和监测代码分开。
举个例子:如下图所示,当不使用aop思想时,业务逻辑和横切逻辑在一起。
这样会使类的代码量增加,不利于维护。同时因为业务逻辑和横切逻辑耦合在一起,如果需要改变横切逻辑时,工作量较大
再用代码举个例:
不使用AOP时代码是这样的
使用AOP时代码是这样的,是不是清爽了很多?
总结:
IOC(控制反转)是一种思想,是Spring容器的核心思想,我们将对象的创建过程交给了Spring容器,这样就无需关注对象的创建、销毁等。同时降低了代码的耦合程度
AOP(面向切面编程),是将逻辑代码和横切代码分开,降低了耦合性。
墨ゞ: 我很久没用这个了,没去研究过
红豆千年: 我遇到一个比较严重的问题,播放流的时候网页占用内存一直在增长,有没有定时释放浏览器内存的函数
Riverun.: 在video.js中配置source部分,将rtmp流字符串填到这里 请问这一步是怎么操作
了凡啊: 可以的兄弟
loveulb: 你好,咨询一下,我需要将监控的内容通过nginx保存在电脑上,是否可以通过你这个教程的1、2步骤实现?