• 利用JDK的中Proxy动态代理实现Spring的AOP技术


    首先给出设计模式静态代理与动态代理的学习:

    http://layznet.iteye.com/blog/1182924   讲的不错

    然后我们实现AOP 就要求我们对委托的所有方法的调用实现拦截

    代理类生成的工厂

    package cn.gbx.aop;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    import cn.gbx.service.impl.PersonService;
    
    public class ProxyFactory implements InvocationHandler{
    	private Object targetObject;
    	
    	public Object createProxyInstance(Object targetObject) {
    		this.targetObject = targetObject;
    		return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
    				this.targetObject.getClass().getInterfaces(), 
    				this);
    	}
    
    	@Override
    	public Object invoke(Object proxy, Method method, Object[] args)
    			throws Throwable {
    		PersonService service = (PersonService) this.targetObject;
    		Object result = null;
    		if (service.getUser() != null) {
    			result = method.invoke(this.targetObject, args);
    		}
    		return result;
    	}
    }
    

      

    测试:

    public class AOPTest {
    	@Test
    	public void aopTest(){
    		ProxyFactory factory = new ProxyFactory();
    		PersonService personService = (PersonService)factory.createProxyInstance(new PersonServiceImpl("xx"));
    		personService.save();
    	}
    }
    

      

  • 相关阅读:
    C语言的存储类别和动态内存分配
    C语言中复杂的声明
    C语言中typedef的解释_2
    C语言中类型限定符
    C语言文件I/O和标准I/O函数
    C语言中存储类别、链接与内存管理
    C++中static与const成员
    C++多态、虚函数、纯虚函数、抽象类
    sizeof结构体
    杂类
  • 原文地址:https://www.cnblogs.com/E-star/p/3560444.html
Copyright © 2020-2023  润新知