Spring 前置通知

本文详细介绍了 Spring AOP 中前置通知的概念及其实现方式,通过具体实例展示了如何利用 MethodBeforeAdvice 接口在方法执行前插入自定义的行为,并演示了如何修改方法参数。

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

      前置通知顾名思意,该通知织入在方法调用之前。我们可以通过Spring 的MethodBeforeAdvice 接口实现。MethodBeforeAdvice 只提供方法before(),该方法无返回值,方法接受调用方法,方法参数和目标对象这3个参数。这里需要注意的是,虽然before()方法得到了调用方法的参数,这里值得注意的是方法参数可以进行更改!

     例子如下:

     1)前置通知代码:

public class Before implements MethodBeforeAdvice
{

    public void before( Method method, Object[] args, Object target)throws Throwable {
        System.out.println("Before.before()");
        System.out.println("method name: " + method.getName());
        Type[] type = method.getGenericParameterTypes();
        for(int i = 0; i < type.length; i++) {
            System.out.println(type[i].toString() + ": " + args[i]);
        }
        System.out.println("target: " + target.toString());
        System.out.println("--------------------");
        //对方法参数进行更改。
        args[0] = new Integer(2);
        for(int i = 0; i < type.length; i++) {
            System.out.println(type[i].toString() + ": " + args[i]);
        }
    }
}

     2)目标对象

public class Target implements Advice
{
    public String test(int i, String s, float f) {
        System.out.println("Target.test()");
        System.out.println("target: " + this);
        StringBuffer buf = new StringBuffer();
        buf.append( "i = " + i);
        buf.append( ", s = \"" + s + "\"");
        buf.append( ", f = " + f);
        return buf.toString();
    }
}

     3)接口定义

public interface Advice
{
    String test(int i, String s, float f);
}

     4)配置文件

<beans>
    <bean id="before" class="spring.Before"/>

    <bean id="aop" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces" value="spring.Advice" />
        <property name="interceptorNames">
            <list>
                <value>before</value>
            </list>
        </property>
        <property name="target">
            <bean class="spring.Target" />
        </property>
    </bean>
</beans>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值