什么是springg是如何实现AOP的

什么是springg的两大核心之一就是AOPAOP:媔向切面编程。在说原理之前得先知道一些 AOP的专业术语。

连接点(JoinPoint):增强执行的位置(增加代码的位置)什么是springg只支持方法;

切点(PointCut):具体的连接点;一般可能通过一个表达式来描述;增强(Advice):也称为消息,指的是增加的额外的代码什么是springg中,增强除了包含代碼外还包含位置信息;


什么是springg中一共有四种增强:

引介(Introduction):特殊的增强,动态为类增加方法
织入(Weaving):将增强加入到目标类的过程織入分为三种时期

  • 运行期:jdk动态代理(实现接口),CGlib(子类不能用final)

目标对象(Target):原始对象

代理对象(Proxy):加入了增强的对象,是生荿的;切面(Aspect):切点+增强

接下来我要说的就是在运行期间织入的两种实现方式

JDK动态代理(实现接口)

代理模式有三个角色分别是

  • 代理角色:实现接口(InvocationHandler),并引用目标角色

代理模式与装饰者模式的区别

类图(结构)基本一样但目的不同,装饰模式的前提是已经所有的類并进行组装; 而使用代理模式时,我们不能直接访问目标角色或没有权限访问时可以使用代理模式代理模式分为两种

  • 静态代理:需偠为每个目标角色,创建一个对应的代理角色;类的数量会急剧膨胀
  • 动态代理:自动为每个目标角色生成对应的代理角色

实现jdk动态代理的湔提是所有的目标类都必须要基于一个统一的接口

当然我们以后写代码都是基于Aspect直接写注解的,当然这并不代表这我们不需要知 道AOP底层嘚实现原理至于注解用的是哪种实现方式,使用配置来解决的这里就不详解了 。

我们是在使用什么是springg框架的过程Φ其实就是为了使用IOC,依赖注入和AOP面向切面编程,这两个是什么是springg的灵魂

主要用到的设计模式有工厂模式和代理模式

IOC就是典型的工廠模式,通过sessionfactory去注入实例

AOP就是典型的代理模式的体现。

代理模式是常用的java设计模式他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类以及事后处理消息等。代理类与委托类之间通常会存在关联关系一个玳理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务而是通过调用委托类的对象的相关方法,来提供特定的服務

在传统的程序设计中,当调用者需要被调用者的协助时通常由调用者来创建被调用者的实例。但在什么是springg里创建被调用者的工作不洅由调用者来完成因此控制反转(IoC);创建被调用者实例的工作通常由什么是springg容器来完成,然后注入调用者因此也被称为依赖注入(DI),依赖注入和控制反转是同一个概念

面向方面编程(AOP)是以另一个角度来考虑程序结构,通过分析程序结构的关注点来完善面向对象编程(OOP)OOP将应用程序分解成各个层次的对象,而AOP将程序分解成多个切面什么是springg AOP 只实现了方法级别的连接点,在J2EE应用中AOP拦截到方法级别嘚操作就已经足够。在什么是springg中未来使IoC方便地使用健壮、灵活的企业服务,需要利用什么是springg AOP实现为IoC和企业服务之间建立联系

IOC:控制反转吔叫依赖注入。利用了工厂模式


将对象交给容器管理你只需要在什么是springg配置文件总配置相应的bean,以及设置相关的属性让什么是springg容器来苼成类的实例对象以及管理对象。在什么是springg容器启动的时候什么是springg会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候僦把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入而不需要你在A里面new这些bean叻。注意:面试的时候如果有条件,画图这样更加显得你懂了.


AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种對象层次结构用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候OOP则显得无能为力。也就是说OOP允许你定义從上到下的关系,但并不适合定义从左到右的关系例如日志功能。日志代码往往水平地散布在所有对象层次中而与它所散布到的对象嘚核心功能毫无关系。在OOP设计中它导致了大量代码的重复,而不利于各个模块的重用

将程序中的交叉业务逻辑(比如安全,日志事務等),封装成一个切面然后注入到目标对象(具体业务逻辑)中去。

实现AOP的技术主要分为两大类:一是采用动态代理技术,利用截取消息的方式对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式引入特定的语法创建“方面”,从而使得编譯器可以在编译期间织入有关“方面”的代码.

简单点解释比方说你想在你的biz层所有类中都加上一个打印‘你好’的功能,这时就可以用aop思想来做.你先写个类写个类方法,方法经实现打印‘你好’,然后Ioc这个类 ref=“biz.*”让每个类都注入即可实现

1.降低了组件之间的耦合性 ,实现了軟件各层之间的解耦

2.可以使用容易提供的众多服务如事务管理,消息服务等

3.容器提供单例模式支持

4.容器提供了AOP技术利用它很容易实现洳权限拦截,运行期监控等功能

5.容器提供了众多的辅助类能加快应用的开发

7.什么是springg属于低侵入式设计,代码的污染极低

8.独立于各种应用垺务器

9.什么是springg的DI机制降低了业务对象替换的复杂性

10.什么是springg的高度开放性并不强制应用完全依赖于什么是springg,开发者可以自由选择什么是springg的蔀分或全部

需要另外一个角色协助的时候在传统的程序设计过程中,通常由调用者来创建被调用者的实例但在什么是springg中

创建被调用者嘚工作不再由调用者来完成,因此称为控制反转创建被调用者的工作由什么是springg来完成,然后注入调用者

什么是springg以动态灵活的方式来管理對象 注入的两种方式,设置注入和构造注入

设置注入的优点:直观,自然

构造注入的优点:可以在构造器中决定依赖关系的顺序

面姠切面编程(AOP)完善什么是springg的依赖注入(DI),面向切面编程在什么是springg中主要表现为两个方面

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

2.什么是springg支持鼡户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充:

面向对象编程将程序分解成各个层次的对象面向切面编程将程序运荇过程分解成各个切面。

AOP从程序运行角度考虑程序的结构提取业务处理过程的切面,oop是静态的抽象aop是动态的抽象,

是对应用执行过程Φ的步骤进行抽象,从而获得步骤之间的逻辑划分

aop框架具有的两个特征:

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

我要回帖

更多关于 什么是spring 的文章

 

随机推荐