SpringAOP动态拦截方法并重写

来源:互联网 发布:雾炮机 知乎 编辑:程序博客网 时间:2024/06/07 03:18

需求理解:当我们在对某个方法进行重写的时候,我们不想修改源代码,希望通过读取配置文件,获取标识符,判断是否需要重写,在不修改源代码的基础上实现动态的修改了方法。

在这里我们用到了SpringAOP的Aspect注解,通过添加@Around注解实现拦截指定切点的方法。

下面代码举例:

@Aspect
@Componentpublic class AroundAop {//创建标识符private static String flag;//在静态代码块中获取配置文件中的标识符值static {//封装的通过ResourceLoader实现的读取指定路径下配置文件的工具类PropertiesLoader propertiesLoader = new PropertiesLoader("classpath:config.properties");flag = propertiesLoader.getProperty("httpsflag");}//指定切点位置@Around("execution(* getSum(String,String))")public String aroundMethod(ProceedingJoinPoint  joinPoint) throws Throwable {System.out.println("从配置文件中获取的标志符为: "+flag);//获取当前方法的参数Object[] args = joinPoint.getArgs();//修改当前方法的参数args[0] = "在环绕方法中拦截当前方法,并修改的参数一";args[1] = "  success";//更改参数后执行方法/*String result = (String) joinPoint.proceed(args);*///如果不想执行切点方法就将上面的proceed注释,执行你需要执行的代码String result = "这是我自定义的方法执行体";System.out.println("自定义的方法内容:   "+result);return null;}}
我们需要理清的思路是:

我们需要拦截切点的方法,然后无论是重写还是修改参数都可以随意操作。

需要做的点:

1、引入约束

<dependency><groupId>org.springframework</groupId>    <artifactId>spring-aspects</artifactId></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-aop</artifactId></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-webmvc</artifactId></dependency>
2、编写AOP类,在里面指定切点与重写的方法

注意:1、这里只能使用@Around注解     

           2、在方法中的参数为:ProceedingJoinPoint

   3、如果需要重写 就调用proceed的方法,否者直接进行替换

阅读全文
0 0
原创粉丝点击