本文共 2495 字,大约阅读时间需要 8 分钟。
假如有以下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("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(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("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("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(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://uxhrb.baihongyu.com/