技术开发 频道

为我学习 Spring AOP 准备(Proxy)

希望spring可以向我上面的方法配置好用来取代下面的实际代码 ^_^
package test.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import junit.framework.TestCase; public class TestProxy extends TestCase { protected void setUp() throws Exception { super.setUp(); } public void testProxy(){ HelloWorld hw = new HelloWorldImpl(); InvocationHandler handler = new HelloWorldHandler(hw); HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance( hw.getClass().getClassLoader(), hw.getClass().getInterfaces(), handler); proxy.sayHelloWorld(); System.out.println(); proxy.setName("liukaiyi"); proxy.getName(); } } interface HelloWorld { void sayHelloWorld() ; void getName(); void setName(String name); } class HelloWorldImpl implements HelloWorld { private String name = ""; public void setName(String name) { this.name = name; } public void sayHelloWorld() { System.out.println("Hello World!"); } public void getName() { System.out.println(this.name); } } class HelloWorldHandler implements InvocationHandler { //要代理的原始对象 private Object objOriginal; /** * 构造函数。 * @param obj 要代理的原始对象。 */ public HelloWorldHandler(Object obj) { this.objOriginal = obj ; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null ; String meName = method.getName(); if(meName.indexOf("set")>-1 ){ return method.invoke(this.objOriginal ,args); } if( meName.equals("getName") ){ //方法调用之前 doBefore(); //仿佛是AOP的影子,呵呵 } //调用原始对象的方法 result = method.invoke(this.objOriginal ,args); //方法调用之后 doAfter(); return result ; } private void doBefore() { System.out.println("before method invoke!"); } private void doAfter() { System.out.println("after method invoke!"); } }
结果:
Hello World!
after method invoke!

before method invoke!
刘凯毅
after method invoke!
原文地址
0
相关文章