java

位置:IT落伍者 >> java >> 浏览文章

Spring3.0中的AOP配置方法


发布日期:2018年01月06日
 
Spring3.0中的AOP配置方法

第一种配置方法使用@AspectJ标签

在配置文件中添加注解

创建一个Java文件使用@Aspect注解修饰该类

创建一个方法使用@Before@After@Around等进行修饰在注解中写上切入点的表达式

说明上述Java文件创建好后需要将其在Spring的容器中进行声明可以在配置文件中定义节点也可以使用@Component组件进行修饰

示例

Java代码

import orgaspectjlangProceedingJoinPoint;

import orgaspectjlangannotationAfter;

import orgaspectjlangannotationAfterThrowing;

import orgaspectjlangannotationAround;

import orgaspectjlangannotationAspect;

import orgaspectjlangannotationBefore;

import orgspringframeworkstereotypeComponent;

/**

* 基于注解的AOP日志示例

* @author ZYWANG

*/

@Component

@Aspect

public class AopLog {

//方法执行前调用

@Before(execution (* comzywangservicesimpl**()))

public void before() {

Systemoutprintln(before);

}

//方法执行后调用

@After(execution (* comzywangservicesimpl**()))

public void after() {

Systemoutprintln(after);

}

//方法执行的前后调用

@Around(execution (* comzywangservicesimpl**()))

public Object around(ProceedingJoinPoint point) throws Throwable{

Systemoutprintln(begin around);

Object object = pointproceed();

Systemoutprintln(end around);

return object;

}

//方法运行出现异常时调用

@AfterThrowing(pointcut = execution (* comzywangservicesimpl**())throwing = ex)

public void afterThrowing(Exception ex){

Systemoutprintln(afterThrowing);

Systemoutprintln(ex);

}

}

上面这段代码中多次使用了重复的切入点这种情况下可以使用@Pointcut标注来修改一个切入点方法(这个方法不需要参数和方法体)然后就可以在@Before等标注中引用该方法作为切入点示例如下

Java代码

import orgaspectjlangProceedingJoinPoint;

import orgaspectjlangannotationAround;

import orgaspectjlangannotationAspect;

import orgaspectjlangannotationBefore;

import orgaspectjlangannotationPointcut;

import orgspringframeworkstereotypeComponent;

/**

* 基于注解的AOP日志示例

* @author ZYWANG

*/

@Component

@Aspect

public class AopLog {

@Pointcut(execution (* comiflysseschoolservicesimpl**()))

public void pointcut(){}

//方法执行前调用

@Before(pointcut())

public void before() {

Systemoutprintln(before);

}

//方法执行的前后调用

@Around(pointcut())

public Object around(ProceedingJoinPoint point) throws Throwable{

Systemoutprintln(begin around);

Object object = pointproceed();

Systemoutprintln(end around);

return object;

}

}

第二种配置方法基于配置文件的配置

创建一个Java文件并指定一个用于执行拦截的方法该方法可以有个或多个参数

在Spring配置文件中注册该Java类为一个Bean

使用等标签进行配置

示例

Java文件

Java代码

import orgaspectjlangProceedingJoinPoint;

/**

* 基于配置文件的AOP日志示例

* @author ZYWANG

*/

public class AopLog {

//方法执行的前后调用

public Object runOnAround(ProceedingJoinPoint point) throws Throwable{

Systemoutprintln(begin around);

Object object = pointproceed();

Systemoutprintln(end around);

return object;

}

}

Spring配置文件

Xml代码

注意上面这个示例使用的是around方式的拦截该方法要求Java类中的方法有一个ProceedingJoinPoint类型的参数

使用第二种方式的AOP配置在Eclipse(有SpringIDE插件)中被拦截到的方法中有标识显示

上一篇:Spring中的事务传播属性详解

下一篇:Eclipse中Ant的配置与测试