`
fanjf
  • 浏览: 329763 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Spring 的AOP(面向切面编程)

 
阅读更多

AOP 是一门编程技术, spring AOP 可以这样理解:把非核心代码从核心代码块中提取出来,通过 Spring 达到一种即插即用的效果。通俗点来说也就是,如果执行方法 1 之前必须要执行一个或多个其他非该功能的一些方法,如果按传统的开发模式,则在方法 1 的前面写几条调用语句,这样做有有好处也有坏处,好处就是如果程序代码量少那么可以很明了的指导这些方法之间的一个关系,但如果程序比较复杂代码量很大的坏,那么该功能模块中势必会参杂很多非核心的一些代码组件在里面,使代码看起来很繁杂,通过 Spring AOP 技术能对此进行改善代码,让非核心的代码通过 Spring 来插入到某个切面上(或者说是某个执行点上),这样核心代码就显得更简洁,非核心的代码或组件就不会参杂在里面了 ;

 

AOP 的概念比较抽象,但只要记住 3 个核心概念就行:

a.        Advice :是指向核心程序内部注入的代码;比如日志记录或者其他非核心的代码

b.        PointCut :是指 Advice 注入的一个切面,也就是上面的所谓的核心代码快,通常是一些 public 的方法( Advice 就是插入到 PointCut 代码的前面或后面);

c.        Advisor :是指 Advice PointCut 的组装者,它是实际的将 Advice 代码注入到 PointCut 代码的操作代码。

 

以下代码是一个简单的运用了 AOP 编程:

接口:

package theInterface;

 

public interface Bean {

      public void theMethod();

}

 

实现类:

package impl;

import theInterface.Bean;

 

public class BeanImpl implements Bean {

  public void theMethod() {

System. out .println( “执行的核心代码:” +

this .getClass().getName() + " says HELLO!" );

  }

}

 

定义一个 Advice 代码,该代码实现 Spring MethodBeforeAdvice 接口,它有一个方法必须实现,该方法是在 PointCut 代码之前调用(看名字可知意):

注意:可能有人写好这个类后 Eclipse 提示要求 Configure build path… 那么很可能还少一个包: aopalliance-1.0.jar ,这个包在 Spring 包中没有,但运行的时候又必须有,所以 Eclipse 会提示导包。

这个包可在我资源里面下载

 

 

package impl;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

 

注意下面的方法中的 Method m 表示需要注入其他代码的方法,也就是实际类的核心代码,可用于进行判断是否需要执行下面的注入代码 ,args 表示方法的参数数组 ,target 表示方法所在类对象

public class TestBeforeAdvice implements MethodBeforeAdvice{

    public void before(Method m, Object[] args, Object target)

      throws Throwable {

        System. out .println( " 需要注入的代码: "

            + this .getClass().getName() + ")" );

      }

}

 

下面定义 Spring 的配置文件:

<? xml version = "1.0" encoding = "UTF-8" ?>

< beans

    xmlns = "http://www.springframework.org/schema/beans"

    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >

   

    < bean id = "beanTarget" class = "impl.BeanImpl" />

      

< bean id = "bean" class = "org.springframework.aop.framework.ProxyFactoryBean" >

       < property name = " proxyInterfaces " >

           < value > theInterface.Bean </ value >

       </ property >

       < property name = "target" >

           < ref local = "beanTarget" />

       </ property >

       < property name = "interceptorNames" >

           < list >

              < value > theAdvisor </ value >

           </ list >

       </ property >

    </ bean >

   

    < bean id = "theAdvisor" class = "org.springframework.aop.support. RegexpMethodPointcutAdvisor " >

       < property name = "advice" >

           < ref local = "theBeforeAdvice" />

       </ property >

       < property name = "pattern" >

           < value > theInterface/.Bean/.theMethod </ value >

       </ property >

    </ bean >

   

    < bean id = "theBeforeAdvice" class = "impl.TestBeforeAdvice" />

</ beans >

注意:

1.  这几个 <bean> 的顺序无所谓,因为程序是先把配置信息全部载入,然后在根据需要进行组装

2.  上面配置了一个名为“ theBeforeAdvice ”的 Advice ,包含了正则表达式的 PointCut Advisor.

3.  Advisor 通过 spring RegexpMethodPointcutAdvisor 类来实现,他定义了一个名为 advice 的标签,该标签提供 Advice 所需要的类;他还定义了一个名为 pattern 的标签,该标签是 PointCut 表示的方法。

4.  配置文件同时还配置了一个工厂 Bean ,它是通过 ProxyFactoryBean 来实现的;

a.  proxyInterfaces 定义了接口类;

b.  target 定义了接口的实现类;

c.  interceptorNames 表示值列表属性,这个列表表示不要在 target 上执行的 Advisor 。注意:必须考虑他们的执行顺序。

分享到:
评论

相关推荐

    JAVA Spring AOP面向切面编程笔记

    JAVA Spring AOP面向切面编程笔记

    Java Spring AOP 面向切面编程的4种实现

    Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...

    Spring面向切面编程AOP

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...

    Spring-aop面向切面编程实例

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...

    Spring AOP面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    Spring AOP面向切面编程实现原理方法详解

    Spring AOP面向切面编程实现原理方法详解 面向切面编程(AOP)是Spring框架中的一个重要内容,通过预编译方式和运行期动态代理实现,在不修改源代码的情况下,给程序动态统一添加功能的一种技术。AOP可以对业务逻辑...

    AOP面向切面编程总结

    ### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...

    Spring4AOP 面向切面编程实例之方法拦截

    Spring4AOP 面向切面编程实例之方法拦截实例 一下利用Spring4的最后一个版本Spring4.3.9,实现简单的方法拦截实例。 Eclipse 建立java工程,导入必要的jar包,工程目录如下:

    SpringAop面向切片

    **Spring AOP 面向切面编程详解** 在Java世界中,Spring框架以其强大的功能和易用性闻名,其中一个核心特性就是面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是为了解决传统面向对象编程中横切关注点...

    SpringAOP切面编程依赖jar包.rar

    学习Spring开发的AOP面向切面编程时所需要的jar包,包括com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    spring aop 自定义切面示例

    在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...

    Spring Aop面向切面的java代码

    Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。面向切面编程(Aspect Oriented Programming,AOP)的核心思想是将关注...

    spring4 AOP 面向切面编程@Aspect

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。`@Aspect`是Spring AOP的核心注解,用于定义一个切面。下面我们将详细...

    spring的aop切面编程实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...

    AOP_使用spring框架进行面向切面编程

    面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...

    Chapter 6_ 使用Spring进行面向切面编程(AOP)

    面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。

    面向切面编程

    ### 面向切面编程(AOP) 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使得代码更加清晰、...

    spring-AOP面向切面编程所需jar包.zip

    该压缩包包含--学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:--系列博客中新需要的三个jar包。包括spring-aspects-5.2.7.RELEASE.jar和spring-aop-5.2.7.RELEASE.jar和...

    16.2 Spring框架-AOP面向切面编程

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...

Global site tag (gtag.js) - Google Analytics