博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring AOP @Around @Before @After 区别
阅读量:5368 次
发布时间:2019-06-15

本文共 3539 字,大约阅读时间需要 11 分钟。

此段小代码演示了spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑。@After 是在所拦截方法执行之后执行一段逻辑。@Around是可以同时在所拦截方法的前后执行一段逻辑。

1、创建接口HelloWorld

import java.util.List;public interface HelloWorld {    List doPrint(String name);}

 

2、创建接口HelloWorld的实现类HelloWorldImpl

import com.google.common.collect.Lists;import com.longteng.lesson2.dao.HelloWorld;import java.util.List;public class HelloWorldImpl implements HelloWorld {    @Override    public List doPrint(String name) {        System.out.println("HelloWorldImpl::doPrint()"+name);        List list = Lists.newArrayList();        list.add(name);        return list;    }}

 

3、创建切面类和切面方法

import com.google.common.collect.Lists;import org.aspectj.lang.ProceedingJoinPoint;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;public class TimeHandler {    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    public void startTime(){        System.out.println("currentTime= "+simpleDateFormat.format(new Date()));    }    public void endTime(){        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("EndTime= "+simpleDateFormat.format(new Date()));    }    public List around(ProceedingJoinPoint proceedingJoinPoint){        List list = Lists.newArrayList();        System.out.println("before around==========");        Object[] args = proceedingJoinPoint.getArgs();        args[0]="我是被修改的参数值";        try {            Object result = proceedingJoinPoint.proceed(args);            result="返回值被修改了。。。";            list.add(result);        } catch (Throwable throwable) {            throwable.printStackTrace();        }        System.out.println("after around==========");        return list;    }}

 

4、编辑aop.xml配置文件

 

5、创建测试类

import com.longteng.lesson2.dao.Impl.HelloWorldImpl;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;public class AopTest {    ApplicationContext context;    @BeforeClass    public void initContext(){        context = new ClassPathXmlApplicationContext("aop.xml");    }    @Test    public void test(){        HelloWorld helloWorld =  context.getBean("helloWorldImpl",HelloWorld.class);        System.out.println( helloWorld.doPrint("zhou"));        System.out.println("-------------------------------------------");    }}

 

6、获取测试结果

11:11:20.218 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'helloWorldImpl'11:11:20.224 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'timeHandler'currentTime= 2018-12-24 11:11:2011:11:20.224 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'timeHandler'before around==========HelloWorldImpl::doPrint()我是被修改的参数值after around==========11:11:20.228 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'timeHandler'EndTime= 2018-12-24 11:11:23[返回值被修改了。。。]-------------------------------------------

 

转载于:https://www.cnblogs.com/zhou-test/p/10167586.html

你可能感兴趣的文章
策略模式 C#
查看>>
[模板]树状数组
查看>>
[HDU 6447][2018CCPC网络选拔赛 1010][YJJ's Salesman][离散化+线段树+DP]
查看>>
设计模式学习的好方法
查看>>
感谢Leslie Ma
查看>>
几种排序方法
查看>>
查看数据库各表的信息
查看>>
第一阶段测试题
查看>>
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>
ES6思维导图
查看>>
第四周作业
查看>>
20151121
查看>>
线段重叠 (思维好题)
查看>>
Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)
查看>>
SBuild 0.1.5 发布,基于 Scala 的构建系统
查看>>
WordPress 3.5 RC3 发布
查看>>
DOM扩展札记
查看>>
primitive assembly
查看>>