`
tuoxinquyu
  • 浏览: 14156 次
  • 性别: Icon_minigender_2
  • 来自: 郑州
社区版块
存档分类
最新评论

Spring AOP + AspectJ in XML 配置示例

阅读更多

In this tutorial, we show you how to convert last Spring AOP + AspectJ annotation into XML based configuration.

For those don’t like annotation or using JDK 1.4, you can use AspectJ in XML based instead.

Review last customerBo interface again, with few methods, later you will learn how to intercept it via AspectJ in XML file.

package com.mkyong.customer.bo;
 
public interface CustomerBo {
 
	void addCustomer();
 
	String addCustomerReturnValue();
 
	void addCustomerThrowException() throws Exception;
 
	void addCustomerAround(String name);
}

1. AspectJ <aop:before> = @Before

AspectJ @Before example.

package com.mkyong.aspect;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
 
@Aspect
public class LoggingAspect {
 
	@Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))")
	public void logBefore(JoinPoint joinPoint) {
		//...
	}
 
}

Equivalent functionality in XML, with <aop:before>.

<!-- Aspect -->
<bean id="logAspect" class="com.mkyong.aspect.LoggingAspect" />
 
<aop:config>
 
  <aop:aspect id="aspectLoggging" ref="logAspect" >
 
     <!-- @Before -->
     <aop:pointcut id="pointCutBefore"
	expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))" />
 
     <aop:before method="logBefore" pointcut-ref="pointCutBefore" />
 
  </aop:aspect>
 
</aop:config>

2. AspectJ <aop:after> = @After

AspectJ @After example.

package com.mkyong.aspect;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.After;
 
@Aspect
public class LoggingAspect {
 
	@After("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))")
	public void logAfter(JoinPoint joinPoint) {
		//...
	}
 
}

Equivalent functionality in XML, with <aop:after>.

<!-- Aspect -->
<bean id="logAspect" class="com.mkyong.aspect.LoggingAspect" />
 
<aop:config>
 
  <aop:aspect id="aspectLoggging" ref="logAspect" >
 
     <!-- @After -->
     <aop:pointcut id="pointCutAfter"
	expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))" />
 
     <aop:after method="logAfter" pointcut-ref="pointCutAfter" />
 
  </aop:aspect>
 
</aop:config>

3. AspectJ <aop:after-returning> = @AfterReturning

AspectJ @AfterReturning example.

package com.mkyong.aspect;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterReturning;
 
@Aspect
public class LoggingAspect {
 
  @AfterReturning(
   pointcut = "execution(* com.mkyong.customer.bo.CustomerBo.addCustomerReturnValue(..))",
   returning= "result")
   public void logAfterReturning(JoinPoint joinPoint, Object result) {
	//...
   }
 
}

Equivalent functionality in XML, with <aop:after-returning>.

<!-- Aspect -->
<bean id="logAspect" class="com.mkyong.aspect.LoggingAspect" />
 
<aop:config>
 
  <aop:aspect id="aspectLoggging" ref="logAspect" >
 
    <!-- @AfterReturning -->
    <aop:pointcut id="pointCutAfterReturning"
      expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomerReturnValue(..))" />
 
    <aop:after-returning method="logAfterReturning" returning="result" 
      pointcut-ref="pointCutAfterReturning" />
 
  </aop:aspect>
 
</aop:config>

4. AspectJ <aop:after-throwing> = @AfterReturning

AspectJ @AfterReturning example.

package com.mkyong.aspect;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterThrowing;
 
@Aspect
public class LoggingAspect {
 
  @AfterThrowing(
   pointcut = "execution(* com.mkyong.customer.bo.CustomerBo.addCustomerThrowException(..))",
   throwing= "error")
  public void logAfterThrowing(JoinPoint joinPoint, Throwable error) {
	//...
  }
}

Equivalent functionality in XML, with <aop:after-throwing>.

<!-- Aspect -->
<bean id="logAspect" class="com.mkyong.aspect.LoggingAspect" />
 
<aop:config>
 
  <aop:aspect id="aspectLoggging" ref="logAspect" >
 
    <!-- @AfterThrowing -->
    <aop:pointcut id="pointCutAfterThrowing"
      expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomerThrowException(..))" />
 
    <aop:after-throwing method="logAfterThrowing" throwing="error" 
      pointcut-ref="pointCutAfterThrowing"  />
 
  </aop:aspect>
 
</aop:config>

5. AspectJ <aop:after-around> = @Around

AspectJ @Around example.

package com.mkyong.aspect;
 
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Around;
 
@Aspect
public class LoggingAspect {
 
	@Around("execution(* com.mkyong.customer.bo.CustomerBo.addCustomerAround(..))")
	public void logAround(ProceedingJoinPoint joinPoint) throws Throwable {
		//...
	}
 
}

Equivalent functionality in XML, with <aop:after-around>.

<!-- Aspect -->
<bean id="logAspect" class="com.mkyong.aspect.LoggingAspect" />
 
<aop:config>
 
   <aop:aspect id="aspectLoggging" ref="logAspect" >
 
    <!-- @Around -->
   <aop:pointcut id="pointCutAround"
      expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomerAround(..))" />
 
   <aop:around method="logAround" pointcut-ref="pointCutAround"  />
 
  </aop:aspect>
 
</aop:config>

Full XML example

See complete AspectJ XML based configuration file.

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
 
<aop:aspectj-autoproxy />
 
<bean id="customerBo" class="com.mkyong.customer.bo.impl.CustomerBoImpl" />
 
<!-- Aspect -->
<bean id="logAspect" class="com.mkyong.aspect.LoggingAspect" />
 
<aop:config>
 
  <aop:aspect id="aspectLoggging" ref="logAspect">
 
    <!-- @Before -->
    <aop:pointcut id="pointCutBefore"
      expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))" />
 
    <aop:before method="logBefore" pointcut-ref="pointCutBefore" />
 
    <!-- @After -->
    <aop:pointcut id="pointCutAfter"
       expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))" />
 
    <aop:after method="logAfter" pointcut-ref="pointCutAfter" />
 
    <!-- @AfterReturning -->
    <aop:pointcut id="pointCutAfterReturning"
       expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomerReturnValue(..))" />
 
    <aop:after-returning method="logAfterReturning"
      returning="result" pointcut-ref="pointCutAfterReturning" />
 
    <!-- @AfterThrowing -->
    <aop:pointcut id="pointCutAfterThrowing"
      expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomerThrowException(..))" />
 
    <aop:after-throwing method="logAfterThrowing"
      throwing="error" pointcut-ref="pointCutAfterThrowing" />
 
    <!-- @Around -->
    <aop:pointcut id="pointCutAround"
      expression="execution(* com.mkyong.customer.bo.CustomerBo.addCustomerAround(..))" />
 
    <aop:around method="logAround" pointcut-ref="pointCutAround" />
 
  </aop:aspect>
 
</aop:config>
 
</beans>
文章来源:http://www.mkyong.com/spring3/spring-aop-aspectj-in-xml-configuration-example/
分享到:
评论

相关推荐

    Spring AOP + AspectJ annotation example

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)...在压缩包文件`Spring3Example`中,可能包含了一些关于Spring AOP和AspectJ注解的示例代码,这将有助于进一步理解和实践这些概念。

    spring aop注解方式、xml方式示例

    下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### 注解方式 #### 1. 定义切面(Aspect) 在Spring AOP中,切面是包含多个通知(advisors)的类。使用`@Aspect`注解标记切面类,例如: ```java @Aspect ...

    Spring AOP @AspectJ 入门实例

    如果你使用的是XML配置,可以添加`&lt;aop:aspectj-autoproxy&gt;`元素;如果是Java配置,使用`@EnableAspectJAutoProxy`注解。 5. **应用切面**:最后,将切面类作为bean注入到Spring容器中,Spring会自动处理切面的织入...

    Spring的AOP实例(XML+@AspectJ双版本解析+源码+类库)

    在Java世界中,Spring框架以其强大的功能和灵活性深受开发者喜爱,尤其在面向切面编程(AOP)方面,Spring提供了两种主要的实现方式:XML配置和@AspectJ注解。本篇文章将深入探讨这两个版本的AOP实现,并结合源码...

    Spring Aop+Log4j 动态日志

    在Spring的配置文件(如applicationContext.xml)中添加以下内容: ```xml &lt;aop:aspectj-autoproxy /&gt; ``` 同时,我们还需要配置Log4j。在项目资源目录下创建`log4j.properties`文件,并设置日志输出级别、输出...

    @AspectJ配置Spring AOP,demo

    `springAOP2`可能是一个包含具体示例代码的目录。`基于@AspectJ配置Spring AOP之一 - 飞扬部落编程仓库-专注编程,网站,专业技术.htm`和其关联的`_files`目录可能包含了一个详细的教程或演示如何配置和运行@AspectJ的...

    征服Spring AOP—— @AspectJ

    在压缩包文件"spring-aop-aspectj"中,可能包含了关于Spring AOP和@AspectJ的示例代码或文档,可以帮助你进一步理解和实践这些知识。通过学习和实践,你将能更好地掌握这一强大的工具,从而在你的IT职业生涯中征服...

    Spring AOP 的实现例子(基于XML配置实现)

    XML配置是Spring AOP早期的主要实现方式,虽然现在有更简洁的注解式配置,但理解XML配置方式对于深入理解AOP原理仍然很有帮助。下面我们将详细探讨如何通过XML配置实现Spring AOP。 首先,我们需要在Spring配置文件...

    基于xml的SpringAOP实例

    在基于XML的配置方式下,Spring AOP提供了直观且灵活的声明式方法来实现这些关注点的分离,使得业务逻辑代码更为简洁。 在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含了若干个通知(Advice)。通知...

    Spring AOP 1.0示例

    在Spring AOP中,我们可以使用XML配置或者注解的方式来声明切面。例如,创建一个名为`WriteLogAspect`的切面类,该类可能包含一个`@Before`注解的方法,表示在目标方法执行前执行的日志记录代码: ```java import ...

    简单spring aop 例子

    本示例将简要介绍如何在Spring应用中实现AOP,通过实际的代码示例帮助理解其工作原理。 首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如...

    Spring使用AspectJ注解和XML配置实现AOP

    本主题将深入探讨如何使用AspectJ注解和XML配置在Spring中实现AOP。 首先,我们要了解AOP的基本概念。AOP的核心是切面(Aspect),它将分散在多个对象中的横切关注点(如日志、性能监控)提取出来,形成独立的模块...

    Spring AOP AspectJ使用及配置过程解析

    本文主要介绍了 Spring AOP AspectJ 的使用及配置过程解析,通过示例代码介绍了非常详细,对大家的学习或者工作具有一定的参考学习价值。 AspectJ 简介 AspectJ 是一个基于 Java 语言的 AOP 框架,Spring 2.0 ...

    Spring AOP之基于AspectJ注解总结与案例

    如果使用XML配置,可以在`&lt;aop:aspectj-autoproxy&gt;`标签下启用;如果是基于Java的配置,可以添加`@EnableAspectJAutoProxy`注解到配置类。 ```java @Configuration @EnableAspectJAutoProxy public class AppConfig...

    使用Spring配置文件实现AOP

    以下是一个简单的Spring AOP配置文件示例: ```xml &lt;aop:config&gt; &lt;aop:aspect id="loggingAspect" ref="loggingAdvice"&gt; &lt;aop:before method="beforeMethod" pointcut-ref="businessMethods"/&gt; &lt;aop:after-...

    spring aop 自定义切面示例

    AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。下面我们将详细探讨如何在Spring中创建和使用自定义切面,以及AspectJ的相关知识。 首先,让我们...

    Spring AOP依赖jar包

    本篇文章将详细介绍 Spring AOP 的核心概念、如何配置以及所依赖的 Jar 包,特别是 `AspectJ 1.6.12` 版本。 1. **AOP 概念** - **切面(Aspect)**:切面是关注点的模块化,如日志、事务管理等,它们横切多个对象...

    Spring aop 性能监控器

    对于源码学习,可以查看Spring AOP的实现,尤其是`org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator`和`org.springframework.aop.aspectj.AspectJExpressionPointcut`这两个类,...

    spring对AOP的支持(使用AspectJ进行AOP演示)

    本示例将重点介绍如何使用 AspectJ 进行 AOP 演示。首先,我们需要引入 Spring AOP 和 AspectJ 相关的依赖库。在 Maven 项目中,可以在 pom.xml 文件中添加如下依赖: ```xml &lt;groupId&gt;org.springframework ...

Global site tag (gtag.js) - Google Analytics