Guice bindInterceptor的使用

package com.ilucky.guice.test12;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.name.Named;

/**
 * v1.0:20161116
 * bindInterceptor的使用
 * aop:面向切面编程.
 */
public class MainTest {

    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new PersonModule());
        Person student = injector.getInstance(Person.class);

        student.say("say......");
        System.out.println("----------------------------------------");

        student.say2("say2......");
        System.out.println("----------------------------------------");

        student.dos("do......");
        System.out.println("----------------------------------------");

        Test test = injector.getInstance(Test.class);
        test.dos("do......");
    }
}

class Test {

    @Named("dos")
    public void dos(String dos) {
        System.out.println("Test do=" + dos);
    }
}

/**
我是在方法之前要做的事情
Student say=say......
我是在方法执行之后做的事情
----------------------------------------
我是在方法之前要做的事情
Student say2=say2......
我是在方法执行之后做的事情
----------------------------------------
我是在方法之前要做的事情
Student do=do......
我是在方法执行之后做的事情
----------------------------------------
我是在方法之前要做的事情
Test do=do......
我是在方法执行之后做的事情
*/
package com.ilucky.guice.test12;

import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.matcher.Matchers;
import com.google.inject.name.Names;

/**
 * 这里视为某些方法绑定拦截器.
 */
public class PersonModule implements Module {

    public void configure(Binder binder) {
        binder.bind(Person.class).to(Student.class);
        // 测试如果注释掉如下代码.
        binder.bindInterceptor(Matchers.any(), Matchers.annotatedWith(Names.named("say")), new MyMethodInterceptor()) ;
        binder.bindInterceptor(Matchers.any(), Matchers.annotatedWith(Names.named("dos")), new MyMethodInterceptor()) ;
    }
}
package com.ilucky.guice.test12;

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

public class MyMethodInterceptor implements MethodInterceptor {

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        doBefore();
        Object ret = invocation.proceed();
        doAfter();
        return ret;
    }

    public void doBefore() {
        System.out.println("我是在方法之前要做的事情");
    }

    public void doAfter() {
        System.out.println("我是在方法执行之后做的事情");
    }
}
package com.ilucky.guice.test12;

public interface Person {

    public void say(String say);
    public void say2(String say);
    public void dos(String dos);
}
package com.ilucky.guice.test12;

import com.google.inject.name.Named;

public class Student implements Person {

    @Override
    @Named("say")
    public void say(String say) {
        System.out.println("Student say=" + say);
    }

    @Override
    @Named("say")
    public void say2(String say) {
        System.out.println("Student say2=" + say);
    }

    @Override
    @Named("dos")
    public void dos(String dos) {
        System.out.println("Student do=" + dos);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值