利用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();

	}

}

  

 

你可能感兴趣的:(spring)