spring aop切面编程aspject切入

定义AspectJTestBean.java

package com.apjept.bean.chapter;

import org.springframework.stereotype.Service;


@Service
public class AspectJTestBean{

 public String MyMethod(String loginInfo) {
  System.out.println("Person login() " + "LoginInfo:" + loginInfo + this);
  return  " logining..."+loginInfo;
 }

 public void loginThrow() throws Exception {
  throw new Exception();
 }

}

 

定义切面MyAspectJ.java

package com.apjept.bean.chapter;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;

@Service
@Aspect
public class MyAspectJ {
 // @Pointcut("execution(* com.apjept.bean.chapter.MyMethod(..))&&"+"args(name,..)")
 // public void logPerson(String name) {}
 //
 // @After("logPerson()&&"+"args(name,..)")
 // public void logafter(String name){
 // System.out.println("logafter 后通知 方法名:" + name);
 // }
 // 后通知 (After (finally) advice) 使用切入点 logPerson (在“返回后通知”之前)
 @AfterReturning("execution(* com.apjept.bean.chapter.*.MyMethod(..))&&"
   + "args(name,..)")
 public void logAfter(String name) {
  System.out.println("logAfter********** 后通知 方法名:" + name);
 }

 // 前置通知 (Before advice) 使用切入点 logPerson
 @Before("execution(* com.apjept.bean.chapter..*.*(..))&&" + "args(name,..)")
 public void logBefore(String name) {
  System.out.println("logPerson 前置通知   方法名:" + name);
 }

 //  
 // // 前置通知 (Before advice) 使用切入点 logPerson
 // @Before("com.apjept.bean.chapter.logPerson() &&"
 // + "args(info)")
 // public void logBeforeArgs(JoinPoint joinPoint, String info) {
 // System.out.println("logPerson 前置通知(有参数)   方法名:"
 // + joinPoint.getSignature().getName() + " 参数: " + info);
 // }
 //  
 // 返回后通知1 (After returning advice) 使用切入点 logPerson (在“后通知”之后)
 @AfterReturning("execution(* com.apjept.bean.chapter..*.*(..))&&"
   + "args(name,..)")
 public void logAfterReturning(JoinPoint joinPoint, String name) {
  System.out.println("logPerson 返回后通知1 方法名:"
    + joinPoint.getSignature().getName() + " return: ");
 }

 //  
 // // 返回后通知2 (After returning advice) 使用切入点 logPerson (在“后通知”之后)
 // @AfterReturning(pointcut = "com.apjept.bean.chapter.logPerson()",
 // returning = "retVal")
 // public void logAfterReturning2(JoinPoint joinPoint, Object retVal) {
 // System.out.println("logPerson 返回后通知2 方法名:"
 // + joinPoint.getSignature().getName() + " return: "
 // + retVal.toString());
 // }
 //  
 // 环绕通知 (Around Advice) 使用切入点 logPerson (在“前通知”之后)
 @Around("execution(* com.apjept.bean.chapter..*.*(..))&&" + "args(name,..)")
 public Object logAround(ProceedingJoinPoint pjp, String name)
   throws Throwable {
  // start stopwatch
  System.out.println("logPerson 环绕通知 start stopwatch 方法名:"
    + pjp.getSignature().getName());
  // 执行切入点
  Object retVal = pjp.proceed();

  // stop stopwatch
  System.out.println("logPerson 环绕通知 stop stopwatch 方法名:"
    + pjp.getSignature().getName() + " return: "
    + retVal.toString());

  return retVal;
 }

}
配置application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

 <context:component-scan base-package="com.apjept.bean.chapter"/>

 <aop:aspectj-autoproxy/>
</beans>

调用示例

AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
  ctx.registerShutdownHook();//注册勾子
  AspectJTestBean aspec = (AspectJTestBean) ctx.getBean("aspectJTestBean");
  aspec.MyMethod("**");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值