AOP:在说AOP的时候,不免想到另外一个OOP,即:面向对象。
OOP是我们初学java的时候所接触的概念。
它强调的是对象。比如,在设计一个业务模块的功能方法时,我们会去分析,这个业务逻辑中所参与的角色对象,最后分别去创建对象,进行编程。
而AOP,它的主要思想是代码的复用,以及增强,但依然保留OOP的特性。
只是在OOP的基础上,实现了对代码的重用,减少了代码的冗余。
比如:我们有两个业务,一个是支付,一个是订单。都要在这其中添加打印日志的功能,如果按照OOP的思想,则都要写一个打印日志的功能代码,这样代码就比较重复冗余了。而采用AOP的话,我们只要写一个打印日志功能的代码,封装成切面,然后把它注入的对应业务对象中就可以实现了打印日志了,不用重复写代码。
在代码增强方面:比如,某些业务代码,没有事务处理,或者打印日志。但是只要注入了该切面,就可以在代码前后,自动的实现事务处理或打印日志。
IOC:控制反转,重点:对象创建的控制权反转,由主动变为被动,自主权不在自己手里了,在第三方ioc容器中。
ico容器,实际上是一个key-value的map,里面存的是各种对象:配置文件中的bean标签,注解:@controller,@service等等spring注解标注的类。(使用反射创建对象放入map中。)
比如:两个对象A,B,存在依赖关系
在A代码中,到某个节点需要B对象时,如果没有ioc,那么就要在A代码中自己创建B对象或者使用存在的B对象,这个自主权都是在自己手里。现在有了ioc,就会自动把B对象注入给A,不要自己去创建或者获取。而且这个时候,A,B都在IOC容器中,不存在任何依赖关系。
所以IOC一个很突出的特性:解耦合
,