`

spring切面编程简介

    博客分类:
  • java
 
阅读更多

在软件编程中,散布于程序中多个地点的函数被称为“交叉事务”(日志管理、权限控制等)。从概念上来说,它们一般是与程序业务逻辑分开的,但经常却是直接嵌入其中的。把这些交叉事务与业务逻辑分离开正式面向切面编程(AOP)的作用所在,由此引入面向切面编程...

Spring AOP的实现原理是:创建一个代理Bean,绑定通知者类(通知者类包含切面代码切点),匹配相应的方法,在目标代码中嵌入执行切面的代码。


 

1. 通过配置来详细说明下Spring AOP的流程:(为了弄清楚原理,所以从配置讲起,虽然目前这种方式已经不常用了,Spring 2.0提供了更加优雅的解决方案。)

代理Bean的配置,ProxyFactoryBean

<bean id="duke" class="org.springframework......ProxyFactoryBean">
    <property name="target" ref="dukeTarget" />
    <property name="interceptorNames" value="audienceAdvisor" />
    <property name="proxyInterfaces" value="com.....Performer" />
</bean>
  • target:这个属性告诉ProxyFactoryBean哪个Bean需要被代理,通俗点就是哪个Bean需要运用切面代码,target配置的就是目标代码。
  • interceptorNames:配置通知者,通知者可以按照如下方式配置:
<bean id="audienceAdvisor" class="org.springframe....AspectJExpressionPointcutAdvisor">
    <property name="advise" ref="audienceAdvice" /> //通知者Bean,主要包含切面代码,需要实现MethodBeforeAdvice等接口,用来表示在目标代码执行前、后、抛出异常时候的切面代码
    <property name="expression" value="execution(* *.perform(..))" /> //AspectJ的切点匹配表达式,用来监测当目标代码执行perform操作时候,触发切面代码
</bean>
  • proxyInterfaces:应该代理目标代码中的哪个接口(这个属性其实有点重复,切点表达式基本可以匹配了,自动代理就是基于这个的升级)

2. AspectJ通过注解提供了另外一个把POJO类注解成切面的方式,比较简洁,直接在Java代码中写注解,额外的配置就是在Spring的上下文中声明一个自动代理的Bean,这样才能知道如何把@AspectJ注解的Bean转化为代理通知。

复制代码
import org.aspectJ.lang.annotation.Aspect;

@Aspect //声明切面
public class Audience {

@Pointcut("execution(* *.perform(..))") //定义切点
public void performance() {}

@Before("performance()")  //切点之前执行
public ....      

@AfterReturning("performance()")  //切点之后执行
public ...

@AfterThrowing("performance()")  //切点抛出异常后执行
public ...
}
复制代码

3. Aspect这种切面声明的方式已经直接在代码中修改,如果要把一个普通的POJO转化成切面,那就必须获得源代码,然后改变源代码,这点是我们不希望看到的。有没有办法,让我们可以引用任何Bean,作为切面呢? Spring 2.0提供了<aop:aspect>,是一个把POJO转化为切面的优雅方案。

复制代码
<aop:config>
<aop:aspect ref="audience">  //切面代码Bean
<aop:pointcut id="performance" expression="excution(* *.performance(..))"  />   //定义切点

<aop:before  method="..."  pointcut-ref="performance" />  //切面代码具体方法,在切点前执行(下同)
<aop:after-returnning  method="..."  pointcut-ref="performance" />
<aop:after-throwing  method="..."  pointcut-ref="performance" />

</aop:aspect>
</aop:config>
复制代码

 


总结:虽然Spring AOP对于大多数切面程序来说是足够了,但Java的构造函数与普通方法是有区别的(不能被继承),这使得Spring基于代理的AOP不能实现对象创建过程的通知。AspectJ实现的切面控制独立于Spring,提供了Spring 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 切面编程实例

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的核心概念包括切面、连接点、通知、切入点表达式等,...

    Spring AOP切面编程简介

    **Spring AOP切面编程简介** 在Java世界中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许我们分离关注点,将横切关注点(如日志、事务管理、性能监控等)与业务逻辑代码解耦。...

    spring的aop切面编程实例

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

    Spring面向切面编程AOP

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

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

    Spring框架是Java领域中实现AOP的常用工具,它通过提供声明式的方式来实现切面编程,使开发者能够更专注于业务逻辑。 在Spring框架中,AOP主要通过以下几个核心概念来实现: 1. **切面(Aspect)**:切面是关注点...

    Spring AOP面向切面三种实现

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

    spring切面小例子

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,例如日志记录、事务管理、性能监控等。本示例将深入探讨如何在Spring中实现AOP,特别是通过注解的方式。...

    Spring 动态代理和aop切面编程例子

    在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...

    Spring切面AOP编程的简单模拟实现

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,例如日志记录、事务管理等。本教程将通过模拟Spring AOP来阐述如何实现一个简单的切面编程。我们将讨论...

    Spring AOP 切面编程实战Demo项目

    2、面向切面编程AOP 在实现过程中,我尽量贴近实际开发与场景,麻雀虽小,五脏俱全,个人感觉这个项目是web框架搭建的一个极简之道实践。 项目中可能还存在很多的问题,希望大家不吝赐教,谢谢。

    spring-aop切面编程使用

    最近公司要求和别的公司对接,但是不想破坏原有的架构,就只有用切面了,百度了下都不全面,就自己写了个小demo,只要导入spring4.2.3的jar就直接可以用,注解实现spingaop机制,1分意思下

    Spring-aop面向切面编程实例

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

    Spring自定义切面事务问题

    在开发基于Spring框架的应用程序时,我们经常需要利用AOP(面向切面编程)来实现横切关注点(如日志记录、安全控制、事务管理等)的模块化处理。其中,事务管理是保证数据一致性的重要手段之一。然而,在实际开发...

    面向切面编程aop简介

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的重要组成部分,它提供了一种在不修改原有业务代码的基础上,插入额外功能的编程模型。Spring AOP使得开发者能够更方便地实现如日志记录、事务管理、...

    spring切面AOP所使用的jar包

    Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...

    Spring切面简介示例代码

    Spring切面编程是Spring框架中的一个重要特性,它实现了面向切面的编程(AOP),这是一种设计模式,旨在提高代码的可重用性、模块化和可维护性。在AOP中,切面是关注点的一个模块化,这些关注点通常包括日志、事务...

    Spring面向切面编程示例代码

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、安全检查等。本示例代码主要展示了如何在Spring框架...

Global site tag (gtag.js) - Google Analytics