什么是IOC和什么是AOP

目录

一、IOC

二、AOP

AOP主要功能

AOP主要意图

AOP应用范围


一、IOC


首先:IOC(Inverse of Contro)控制反转,有时候也被称为DI依赖注入,它是一种降低对象耦合关系的一种设计思想。

 1.概念引入:
      1.1一般而言,在开发中使用分层体系结构,都是上层调用下层的接口,上层依赖下层的执行,这就使得调用者依赖被调用者。所以现在调用者和被调用者之间就错在紧密得联系,假如现在一方要进行变动,那么就会导致程序出现较大得变动,显然这不合适,这样降低了程序得可扩展性。

      . 举个例子:现在要给一家卖茶叶得商家做一个管理系统:该商家一开始只卖绿茶,但是现在业务扩展了要开始卖红茶,传统的方法我们会针对茶抽象出一个基类,绿茶只需要继承该基类即可。

采用上面的方法实现后,在需要GreenTea的时候只需要执行以下的代码即可,AbstracTea tea = new GreenTea(); 虽然这种方式是可以满足设计要求的,但是明显存在可扩展性不好的缺点,假如现在商家发现绿茶销售不好,开始销售红茶,那么理论上是只需要实现一个Black类,并且让这个类继承AbstracTeam类即可,但是,系统中所有用到了AbstracTea tea = new GreenTea();的地方都需要改编成AbstracTea tea = new BlackTea();而这种创建实例的方式往往会导致程序的改动量非常的大。

1.2那么问题来了,怎么做才能够增强系统的可扩展性呢?首先我们能想到的方式是采用工厂模式把创建对象的行为包装起来:

通过上面的方式,我们把创建对象的过程委托给TeaFactory来完成,在需要使用Tea对象的时候只需要调用工厂类的gettea方法即可,具体创建对象的逻辑我们放在工厂累类中去实现,当商家需要改变茶的类别时候,我们只需要去改动工厂类中创建对象的逻辑即可,这样就满足了系统的可扩展性。

2.IOC
2.1上面提到的工厂模式虽然增强了系统的可扩展性,但是从本质上来讲,工厂模式只不过是把会变动的逻辑移动到了工厂类里里面,当系统类较多的时候,系统的扩展就使得系统经常需要改变工厂类中的代码,但是我们采用了IOC设计思想后,程序就会有更好的可扩展性:

二、AOP

1、动态代理

作用:可以在现有方法之上添加代码,增加现有程序的功能。

将与业务无关的通用功能抽取出来,单独编写,开发人员可以专注于业务逻辑的编写。
这些通用功能包括日志,权限管理,事务处理,异常处理等。

2、通用功能的增加与删除,可以通过配置文件进行配置。

3、AOP 基本原理:不改变原程序的情况下,增加程序功能。(技术原理:动态代理)。

之前讲过的OOP
OOP=面向对象编程=Object Oriented Programming,这个OOP不适合为分散的对象引入公共行为,这时候就需要AOP了。

AOP 类似jsp中的filter(过滤器),struts2中的interceptor(拦截器)

两种配置方式:注解配置,XML配置。

AOP主要功能


日志记录,性能统计,安全控制,事务处理,异常处理等等wn及扩展

AOP主要意图


将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。


AOP应用范围

具体功能如下:

  • Authentication 权限
  • Caching缓存
  • Context passing内容传递
  • Error handling 错误处理
  • Lazy loading 延时加载
  • Debugging 调试
  • logging, tracing, profiling and monitoring 记录跟踪 优化 校准
  • Performance optimization性能优化
  • Persistence 持久化
  • Resource pooling资源池
  • Synchronization 同步
  • Transactions事务

最常见的一些横切行为如下面这些:

1、日志记录,跟踪,优化和监控
2、事务的处理
3、持久化
4、性能的优化
5、资源池,如数据库连接池的管理
6、系统统一的认证、权限管理等
7、应用系统的异常捕捉及处理
8、针对具体行业应用的横切行为

在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

这里写图片描述

  • 面向切面编程(AOP) 

面向切面编程(AOP)就是对软件系统不同关注点的分离,开发者通过拦截方法调用并在方法调用前后添加辅助代码。
  AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多了类的公共行为封装到一个可重用的模块,并将其命名为“Aspect”,即切面

这里写图片描述

  所谓“切面”,简单地说,就是将那些于业务无关,却为月舞模块所共同调用的逻辑或责任封装起来。
  ①切面就是横切面,代表的是一个普遍存在的共有功能。
  ②AOP代表的是一个横向关系
  ③AOP吧软件系统分为两个部分:核心关注点和横切关注点。
  ④业务出路的主要流程是核心关注点,与之关系不大的部分是横切关注点。
  横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。

  • AOP的作用在与分离系统中各个关注点,将核心关注点和横切关注点分离开来。

你可能感兴趣的:(面试问题归纳)