Spring aop @args 用法 demo(—)

本文介绍了Spring AOP中@args注解的使用,通过示例展示了如何根据方法参数上标注的特定注解来决定拦截。配置了spring-args.xml,并创建了注解类、切面类、入参类和目标类,运行结果验证了@args注解的拦截效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说下@args定义:

通过判别目标方法运行时入参对象类是否标注特定注解来指定连接点。如@args(com.yuan.advice.args.PrintArgs) 表示任何一个目标方法,如果方法入参类标注了PrintArgs注解,该方法就会被拦截。

配置文件:
spring-args.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.yuan.advice.args" />
    <aop:aspectj-autoproxy proxy-target-class="true"/>
</beans>

注解类:

@Component
@PrintArgs(name = "parmentModel")
public class ParentModel
{
    Logger logger = LoggerFactory.getLogger(ParentModel.class);

    public void methodA(String hello)
    {
        logger.info("parmentModel method");
    }
}

切面类

@Component
@Aspect
@Order(-1)
public class ArgsAspect
{
    Logger logger = LoggerFactory.getLogger(ArgsAspect.class);

    @Before("@args(PrintArgs)")
    public void printArgs(JoinPoint joinPoint)
    {
        logger.info("{},此方法入参数标注了PrintArgs注解",joinPoint.getSignature());
    }
}

入参类

@Component
@PrintArgs(name = "parmentModel")
public class ParentModel
{
    Logger logger = LoggerFactory.getLogger(ParentModel.class);

    public void methodA(String hello)
    {
        logger.info("parmentModel method");
    }
}

目标类:

@Component
public class ArgsModel
{
    Logger logger = LoggerFactory.getLogger(ArgsModel.class);
    public void testArgs(ParentModel parentModel)
    {
       logger.info("入参为{}",parentModel);
    }
}

Test类:

public class ArgsAspectTest
{
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-args.xml");

        ArgsModel argsModel = (ArgsModel)context.getBean("argsModel");
        ParentModel parentModel = (ParentModel)context.getBean("parentModel");
        argsModel.testArgs(parentModel);
    }

}

运行结果:
17:44:55.291 [main] INFO com.yuan.advice.args.ArgsAspect - void com.yuan.advice.args.ArgsModel.testArgs(ParentModel),此方法入参数标注了PrintArgs注解
17:44:55.339 [main] INFO com.yuan.advice.args.ArgsModel - 入参为com.yuan.advice.args.ParentModel@31e5415e。

  • 以上为简单spring aop @args用法小demo 。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值