Aop

网上有几个不错的文章,参考下

写个不用xml的

被织入的class

public class Person {

    public void say(){
        System.out.println("say..........");
    }
}

adivce

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class SayAop implements MethodInterceptor {

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println("before");
        Object retVal = invocation.proceed();
        System.out.println("after");
        return retVal;
    }

}

测试通过

package com.cor.test;

import org.aopalliance.aop.Advice;
import org.junit.Test;
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.JdkRegexpMethodPointcut;

import com.cor.aop.SayAop;
import com.cor.common.Person;

public class AopTest {

    @Test
    public void test() {
        Person one = new Person();
        Person proxyOne;
        JdkRegexpMethodPointcut pc = new JdkRegexpMethodPointcut();
        pc.setPattern(".*say.*");//正则表达 say 被织入
        Advice advice = new SayAop();//通知
        Advisor advisor = new DefaultPointcutAdvisor(pc, advice);

        // 创建BeanOne代理
        ProxyFactory pf1 = new ProxyFactory();
        pf1.addAdvisor(advisor);
        pf1.setTarget(one);
        proxyOne = (Person) pf1.getProxy();
        proxyOne.say();


    }
}

写个用 xml的

定义一个接口,接口方法被织


public interface Sleep {

    public void sleep();
}

实现接口

public class Human implements Sleep {

    @Override
    public void sleep() {
        System.out.println("睡觉..........");

    }

}

advice

package com.cor.aop;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

public class SleepHelper implements MethodBeforeAdvice, AfterReturningAdvice {

    @Override
    public void afterReturning(Object arg0, Method arg1, Object[] arg2,
            Object arg3) throws Throwable {
        System.out.println("穿衣服");

    }

    @Override
    public void before(Method arg0, Object[] arg1, Object arg2)
            throws Throwable {
        System.out.println("脱衣服");

    }

}

xml配置

<bean id="sleepHelper" class="com.cor.aop.SleepHelper">
    </bean>
    <bean id="sleepAdvisor"
        class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="sleepHelper" />
        <property name="pattern" value=".*sleep" />
    </bean>
    <bean id="human" class="com.cor.common.Human">
    </bean>
    <bean
        class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />

注入通过测试

    @Autowired
    private Sleep human;
    human.sleep();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值