Spring AOP(XML最终+环绕通知)

最终通知

在调用目标对象的方法之后执行切面方法

代码片段

java 复制代码
package com.hk.eshop.aop;

import com.hk.eshop.java.IUserMng;

public class UserMng{
    public String save(String id, String name) {
        System.out.println("save() id="+id+",name="+name);
        return "save() id="+id+",name="+name;
    }

    public String find(String id) {
        System.out.println("find() id="+id);
        return "find() id="+id;
    }
}


package com.hk.eshop.aop;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;

public class AuditAspect {
    public void audit(JoinPoint joinPoint)
    {
        Object[] args = joinPoint.getArgs();
        Signature sig = joinPoint.getSignature();
        System.out.println("触发方法......"+sig.getName());
        System.out.println("方法审计开始......");
        for(int i=1;i<=args.length;i++)
            System.out.println("第"+i+"个参数="+args[i-1]);
        System.out.println("方法审计结束......");
        System.out.println("切入点表达式......"+joinPoint.toString());
    }
}

环绕通知

在调用目标对象的方法之前或之后执行切面方法。






代码片段

java 复制代码
package com.hk.eshop.aop;

public class OrgMng {
    public String save(String id, String name){
        System.out.println("save() id="+id+",name="+name);
        return "save() id="+id+",name="+name;
    }

    public String find(String id){
        System.out.println("find() id="+id);
        return "find() id="+id;
    }
}


package com.hk.eshop.aop;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;

public class AuditOrgAspect {
    public void audit(ProceedingJoinPoint joinPoint)
    {
        Object[] args = joinPoint.getArgs();
        Signature sig = joinPoint.getSignature();
        System.out.println("触发方法......"+sig.getName());
        System.out.println("方法审计开始......");
        for(int i=1;i<=args.length;i++)
            System.out.println("第"+i+"个参数="+args[i-1]);
        Object value = null;
        try
        {
            value = joinPoint.proceed(args);
            System.out.println("value......"+value);
        }
        catch (Throwable e)
        {
            e.printStackTrace();
        }
        System.out.println("方法审计结束......");
        System.out.println("切入点表达式......"+joinPoint.toString());
    }
}


package com.hk.eshop.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main( String[] args )
    {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println("#####################最终通知#######################");
        UserMng umng = (UserMng)ctx.getBean("userMng");
        umng.save("1","Java");
        umng.find("2");
        System.out.println("#####################环绕通知#######################");

        OrgMng omng = (OrgMng) ctx.getBean("orgMng");
        omng.save("root", "Java");
        omng.find("root");

    }
}
相关推荐
无敌秋1 天前
python/c++/java上云
java·c++·python
都叫我大帅哥1 天前
BCrypt 还是 Argon2?Spring Security 密码加密方案深度解析与实战对比
java·spring
IKUN家族1 天前
Spring MVC(一)
java·spring·mvc
老马识途2.01 天前
关于跨域问题的总结
java·前端
都叫我大帅哥1 天前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng1 天前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2501_936415691 天前
可变参数&综合练习&斗地主游戏
java·windows·游戏
极客先躯1 天前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq1 天前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
wang09071 天前
自己动手写一个spring之aop_1
java·后端·spring