您的位置:首页 > 编程语言 > Java开发

使用JDK动态代理实现切面编程

2013-06-24 23:18 483 查看
package com.huxin.dynamic_proxy;

public interface UserService {
public void add(String userId,String name);
public void modify(String userId,String name);
public String findById(String userId);
}


package com.huxin.dynamic_proxy;

public class UserServiceImpl implements UserService {
public void add(String userId, String name) {
System.out.println("add()");

}
public void modify(String userId, String name) {
System.out.println("modify()");

}
public String findById(String userId) {
System.out.println("findById()");
return "王八";
}
}


package com.huxin.dynamic_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.InputStream;
import org.omg.CORBA.portable.InvokeHandler;
import org.omg.CORBA.portable.OutputStream;
import org.omg.CORBA.portable.ResponseHandler;

public class LogHandler implements InvocationHandler {
private static LogHandler instance = new LogHandler();
private Object targetObject;
private LogHandler(){}
public static LogHandler getInstance(){
return instance;
}
//生成一个动态代理的对象
public Object newDynamicproxy(Object targetObject){
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object object = null;
System.out.println(method.getName()+"方法开始之前被调用"+"参数为:"+ args[0]+args[1]);
//这句话才是真正调用它的方法
object = method.invoke(this.targetObject, args);
System.out.println(method.getName()+"方法开始之后被调用");
return object;
}
}


package com.huxin.dynamic_proxy;

public class Client {
public static void main(String[] args) {
UserService userService = (UserService)LogHandler.getInstance().newDynamicproxy(new UserServiceImpl());
userService.add("1", "hu_xinxin");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: