JDKの中Proxyダイナミックエージェントを利用してSpringのAOP技術を実現します。

1417 ワード

まず、設計モード静的エージェントと動的エージェントの学習を与える。
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();

	}

}