Spring ProxyFactory 和 方法拦截器 MethodInterceptor  
   
所属分类 spring
浏览量 901
ProxyFactory proxyFactory=new ProxyFactory();
proxyFactory.setTarget(new Hello());
proxyFactory.addAdvice(new HelloMethodInterceptor());
Hello hello = (Hello) proxyFactory.getProxy();
target 被代理对象  Hello
方法拦截器  HelloMethodInterceptor
public class Hello{
	
	public String hello(String name) {
		if(name==null) {
			throw new RuntimeException("name is null");
		}
		return "hello,"+name;
	}
	
	public String hello2(String name) {
		if(name==null) {
			throw new RuntimeException("name is null");
		}
		return "hello2,"+name;
	}
	
}
HelloMethodInterceptor
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class HelloMethodInterceptor implements MethodInterceptor{
	
	@Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        Object result=null;
        try{
        	System.out.println("method="+methodInvocation.getMethod());
        	System.out.println("args="+methodInvocation.getArguments());
            result= methodInvocation.proceed();
            return result;
        }catch (Exception e){
            System.out.println("invoke error,"+e);
            return result;
        }
    }
}
 测试类 Main.java 
 import org.springframework.aop.framework.ProxyFactory;
public class Main{
	
	public static void main(String[] args)throws Exception {
		ProxyFactory proxyFactory=new ProxyFactory();
        proxyFactory.setTarget(new Hello());
        proxyFactory.addAdvice(new HelloMethodInterceptor());
        Hello hello = (Hello) proxyFactory.getProxy();
        System.out.println(hello.getClass());
        System.out.println(hello.toString());      
        System.out.println(hello.hashCode());      
        System.out.println(hello.hello(null));
        System.out.println(hello.hello("dyyx"));  
        
        System.out.println(hello.hello2("dyyx"));   
	}
}
完整代码 
https://gitee.com/dyyx/hellocode/tree/master/demo/springbootdemo/src/main/java/proxyfactory
 代理的几种实现方式  
 基于Aspect注解的spring aop 实例  
 AOP要点整理 
 AspectJ简介及实例   
 spring aop 内部方法调用拦截说明  
 spring aop cglib 代理类源码查看 
 上一篇  
   
 下一篇  
 dubbo简史 
 Dubbo2.7三大新特性简介 
 zookeeper单机安装 
 Spring AOP @Aspect 
 powermock 静态方法mock 
 mockito 实例