Spring中的Annotation 操作步骤: 1. 添加jar 2. 定义切面类 package demo; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; 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; @Component //该标志:配置文件中不用配置bean @Aspect //表示该类为切面类 public class MyHandler { //定义为切面点方法 @Pointcut("execution(* demo.GreetImpl.*(..))") //该方法不能带有返回值和参数 private void allMethod(){} //支持 || && ! //@Pointcut("execution(* demo.GreetImpl.*(..)) || execution(* demo.GreetImpl.add*(..)))") @Before("allMethod()") public void myBeforeAdvice(JoinPoint jp) { System.out.println("--before method " + jp.getSignature().getName() + ":" + jp.getArgs());// 前置通知 } @AfterReturning(pointcut="allMethod()",returning="ret") public void myAfterReturnningAdvice(JoinPoint jp, Object ret) { System.out.println("--return method " + jp.getSignature().getName() + ":" + ret); // 返回后通知 } @AfterThrowing(pointcut="allMethod()",throwing="ex") public void myException(JoinPoint jp, Throwable ex) { System.out.println("有异常了:" + ex.getMessage()); } //异常通知 @After("allMethod()") public void myFinally(JoinPoint jp) { System.out.println("finally通知......"); } // 一个作用相当于几个。(前面几个可以不用) @Around("allMethod()") public Object myAround(ProceedingJoinPoint pjp) { Object obj = null; System.out.println("--before method " + pjp.getSignature().getName()); try { obj = pjp.proceed(); System.out.println("return method...."+obj); } catch (Throwable e) { System.out.println("有异常了:" + e.getMessage()); } System.out.println("--finally....... "); return obj; } } 3. POJO类 package demo; public interface Greet { public void sayHello(String name); public String goodBye(); } package demo; import org.springframework.stereotype.Component; @Component("greet") public class GreetImpl implements Greet { public void sayHello(String name) { try { System.out.println("Hello: " + name); int i=1/0; } catch (Exception e) { throw new RuntimeException(e); } System.out.println("+++++++++"); } public String goodBye() { System.out.println("Good bye!"); return "aabb"; } } 测试类: package demo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Greet g = (Greet)context.getBean("greet"); // g.sayHello("aa"); g.goodBye(); } } 4. 配置文件 <?xml version="1.0" encoding="UTF-8"?> <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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!—表示扫描demo包中有标志为Component组建的类 --> <context:component-scan base-package="demo" />