你的位置:首页 > Java教程

[Java教程]Spring中AOP实例详解


Spring中AOP实例详解

 

需要增强的服务

假如有以下service,他的功能很简单,打印输入的参数并返回参数。

@Servicepublic class SimpleService {  public String getName(String name) {    System.out.println(get name is: + name);    return name;  }} 

定义切面和切点

@Component@Aspectpublic class LogAspect {  // 定义切点  @Pointcut(within(com.ydoing.service..*))  // @Pointcut(execution(* com.ydoing.service.*.*(..)))  public void pointCut() {  } }

Before增强处理

  // 定义Before增强处理  // 在目标方法调用之前执行增强处理  @Before(pointCut())  public void before(JoinPoint jp) {    // 获取连接点传入参数    // Object args = jp.getArgs();    System.out.println(Before增强处理--execute before target method call);  } 

测试输出:

Before增强处理--execute before target method callget name is: Bob

AfterReturning增强

  // 在目标方法调用之后执行增强处理  @AfterReturning(pointcut = pointCut(), returning = ret)  public void afterReturning(JoinPoint jp, Object ret) {    System.out.println(AfterReturnin增强处理--execute after target method call, return value is : + ret);  }

测试输出:

get name is: BobAfterReturnin增强处理--execute after target method call, return value is :Bob

Around增强

  @Around(pointCut())  public void around(ProceedingJoinPoint jp) {    System.out.println(Around增强--around start...);    Object[] args = jp.getArgs();    // 修改目标方法传入的参数    args[0] = around_add_ + args[0];    try {      System.out.println(修改传入参数后执行输出:);      jp.proceed(args);    } catch (Throwable e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    System.out.println(Around增强--around end);  }

输出:

Around增强--around start...修改传入参数后执行输出:get name is: around_add_BobAround增强--around end

After增强

  // 无论是否发生异常都会 处理  @After(pointCut())  public void after() {    System.out.println(After增强--always do no matter what happen);  }

输出:

get name is: BobAfter增强--always do no matter what happen 

AfterThrowing增强

  @AfterThrowing(pointcut = pointCut(), throwing = ex)  public void afterThrowing(JoinPoint jp, Throwable ex) {    System.out.println(error is: + ex);  }

这里没抛异常,就没有输出了

测试代码如下

@Configuration@EnableAspectJAutoProxy@ComponentScan(basePackages = com.ydoing.service,com.ydoing.aspect)public class AppConfig {  public static void main(String[] args) {    @SuppressWarnings(resource)    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);    SimpleService service = ctx.getBean(SimpleService.class);    service.getName(Bob);  }}

 

 

 

原文地址:http://www.bkjia.com/Javabc/1077751.html

 QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!