java面向切面编程

面向切面在英文中的单词是Aspect Oriented Programming(AOP),在spring框架中叫aop,它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方法论,它是对传统OOP编程的一种补充。

AOP技术是建立在Java语言的反射机制与动态代理机制之上的。请看下图

以上图是利用jdk动态代理为真实对象上的每个方法上加上日志功能。从这张图中可以看出,我们是面向真实对象上的方法编程,把方法切开,在执行方法之前做了日志功能。但是在实际开发中,我们不会把日志代码写死在程序里面,我们会把切面的代码用对象的形式进行封装,以对象的形式传递参数,然后执行对象,就是执行了切面的代码,这就是在面向切面编程。

在实际开发中,这种面向切面编程通常用在做系统的日志记录,权限管理和,事物管理等功能,这样做的好处是让j2ee程序员在编写具体的业务逻辑出来方法时,只需关心具体业务逻辑的实现,既提高了工作效率,又使代码变得简洁优雅。

下面我以这样的一个例子讲解:在系统的执行过程中,要求在用户每次调用service层的每个方法时,在控制台打印出调用的方法名称以及调用该方法的次数,代码实现如下:

上面的代码关键之处是BeanFactory的getPerson()方法的实现,接受任意的类(只要该类有接口实现),并把切面的代码以对象的方式进行传递,这样做能够使得我们编程人员更加关心具体业务代码的实现,我们只需获取Service层对象的时候从工厂中获得代理对象,这个对象就比原来的对象功能更强大。

我们做系统在使用了spring框架之后会发现这样一种场景,我们写好了一个对象,然后往spring容器里一放,然后再取出来,结果这个对象就比以前强大很多,比如这个对象自动拥有了事物管理功能,日志记录功能等,它是怎么做到的?其实和我上面写的原理上差不多,只要上面的例子懂,spring的aop再无秘密可言。但是有一定要注意,在实际开发中我们很多对象是服务器给我们的,如果这个对象没有实现接口,那它怎么产生代理类?spring用到了CGLIB这套api,它是基于子类的方式产生代理,这里不做描述。还有一点,在开发中,如果一个类即没有实现接口,又是final的,那么它就不能产生代理类。

java面向切面编程

时间: 2024-10-30 21:30:18

java面向切面编程的相关文章

Java 面向切面编程 AOP

本文内容 实例 引入 原始方法 装饰者模式 JDK 动态代理和 cglib 代理 直接使用 AOP 框架 下载 demo 实例 引入 package com.cap.aop;   public interface ICalculator { public double add(double num1, double num2) throws Exception;   public double sub(double num1, double num2) throws Exception;   p

Java——面向切面编程,Spring中的AOP编程

面向切面编程 AOP思想:将横向重复代码,纵向抽取出来 AOP体现--Filter AOP体现--拦截器 AOP体现--动态代理 Spring中实现AOP思想 原理:Spring可以为容器中管理的对象生成代理对象 代理分为动态代理和cglib代理: 动态代理(优先) 被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理技术,换句话说,就是代理对象和被代理要实现同一接口 cglib代理 第三方代理技术,cglib代理,可以对任何类生成代理,代理的原理是对目标对象进行继承代理,

java面向切面编程总结-面向切面的本质

面向切面的本质:定义切面类并将切面类的功能织入到目标类中: 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before, @AfterReturning,@After,@AfterThrowing,@Around). https://www.cnblogs.com/oumyye/p/4480196.html 现将图6-6中涉及到的一些概念解释如下. 切面(Aspect): 其实就是共有功能的实现.如日志切面.权限切面.事务切面等.在实际应用中通常是一

Java实战之03Spring-03Spring的核心之AOP(Aspect Oriented Programming 面向切面编程)

三.Spring的核心之AOP(Aspect Oriented Programming 面向切面编程) 1.AOP概念及原理 1.1.什么是AOP OOP:Object Oriented Programming面向对象编程 AOP:Aspect Oriented Programming面向切面编程 1.2.代理 充分理解:间接 主要作用:拦截被代理对象执行的方法,同时对方法进行增强. 1.2.1.静态代理 特点:代理类是一个真实存在的类.装饰者模式就是静态代理的一种体现形式. 1.2.2.动态代

java aop面向切面编程

最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming  面向切面编程.解耦是程序员编码开发过程中一直追求的.AOP也是为了解耦所诞生. 具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特

Spring框架——AOP(面向切面编程)详解

 1 AOP概述 ●AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充. ●AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点. ●在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类.这样一来横切关注点就被模块化到特殊的类里--这样的类我们通常称之为"切面".

Spring面向切面编程(AOP)

1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即实例化:spring加载完成,立即创建对象) scope:属性 singleton:默认值为单例,默认也是立即加载,在加载完成spring容器的时候,bean对象已经创建完成 prototype:多例的,默认懒加载,spring容器加载完成的时候,不会创建bean的对象,只有从容器获得bean对象的

初识Aop(面向切面编程)

AOP面向方面/面向切面编程 AOP将分散在系统中的功能块放到一个地方- 切面 可以声明式的定义何时何地应用这些功能,而不是在需要新功能的地方修改代码 好处每个业务逻辑放在一个地方,不是分散到代码各个角落.业务模块只包含核心功能,辅助功能转到切面中,使其更加清晰.关注的是共同处理.通过spring配置把某个作用应用到多个点上.提高灵活性 重要术语切面(Aspect):就是你要实现的交叉功能---共通业务处理可以被切入到多个目标对象.并且多次使用连接点(Joinpoint):应用程序执行过程中插入