IOC&AOP

IOC&AOP

 

IOC

IOCinverse of control)控制反转,其包括两个内容:一个是控制,一个是反转。在程序中,被调用类的选择控制权从调用它的类中移除,转交给第三方裁决,这个第三方指的就是spring的容器。(在spring中创建被调用者的工作不再调用者来完成,因此称为控制反转。创建被调用者的工作spring来完成,然后注入调用者,因此也称为依赖注入。)依赖注入(dependecy Injection)与IOC是同一个概念,(也成DI机制)

Ioc:就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过springbean工厂为你长生这样一个对象。

 

注入依赖的理解:

DIDependency Injection,依赖注入):比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉springA中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个ConnectionA需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,所以就叫依赖注入。

 

优点:

(1)降低类之间的耦合;

(2)倡导面向接口编程、实施依赖倒换原则;

3)提高系统可插入、可测试、可修改等特性。

缺点:占用内存多、构造对象慢、启动慢。

 

依赖注入的三种方式:

Spring以动态灵活的方式管理对象,依赖注入的三种方式:(1)接口注入(2Construct注入(3Setter注入

接口注入:

接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活性、易用性上不如其他两种注入模式,因而在 IOC 的专题世界内并不被看好。

Setter 注入:

对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。

如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。

如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。

构造器注入:

在构造期间完成一个完整的、合法的对象。

所有依赖关系在构造函数中集中呈现。

依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。

 

AOP:

AOPAspect Oriented programming)面向切面编程,是目前软件开发中的一个热点,是spring框架的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率

主要功能:日志记录、性能统计、安全控制、事务处理、异常处理等等(将这些代码从业务逻辑代码汇总划分出来,通过这些行为的分离,我们希望可以将他们独立到非指导业务逻辑方法中,进而改变这些行为的之后不影响业务逻辑的代码)

 举例:比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。


AOP完善spring的依赖注入(DI),面向切面编程主要表现在:

1:面向切面编程提供声明式事务管理

2spring支持用户自定义的切面

 

AOPOOP

AOP(面向切面编程)是oop(面向对象编程)的补充,oop程序分解成各个层次的对象aop将程序运行过程分解成各个切面

AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面。

Oop静态的抽象,aop动态的抽象,是对 应用 执行过程中步骤进行抽象,从而获得步骤之间的逻辑划分

 

AOP框架的两个特性:

1:各个步骤之间良好的隔离性

2:源代码无关性

缺点:目前还不支持流程切面。织入慢执行效率低、不支持new关键字创建的对象的切入,必须使用bean factory织入。

 

实现AOP技术分为两类:

1:采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行(主要是实现InvocationHandler,并且将目标对象注入到代理对象中,利用反射机制来执行目标对象的方法。

2:采用静态织入的方式,引入特定的语法创建“方面”,从而使得贬义词可以在编译期间织入有关“方面”的代码,(静态代理关键是在代理对象和目标对象实现共同的接口,并且代理对象持有目标对象的引用)

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值