动态代理,代理类需要实现接口java.lang.reflect.InvocationHandler
接口UserDao
public interface UserDao {
void addUser();
void deleteUser();
}
两个普通的实现
public class UserDaoOracleImpl implements UserDao {
@Override
public void addUser() {
System.out.println("UserDaoOracleImpl.addUser()");
}
@Override
public void deleteUser() {
System.out.println("UserDaoOracleImpl.deleteUser()");
}
}
public class UserDaoMySqlImpl implements UserDao {
@Override
public void addUser() {
System.out.println("UserDaoMySqlImpl.addUser()");
}
@Override
public void deleteUser() {
System.out.println("UserDaoMySqlImpl.deleteUser()");
}
}
代理的接口实现
public class UserDaoDynamicProxy implements InvocationHandler {
private Object target;
public Object getProxyInstance(Object target){
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = null;
obj = method.invoke(this.target, args);
return null;
}
}
测试类
public class TestDynamicProxy {
public static void main(String[] args) {
UserDaoDynamicProxy udp = new UserDaoDynamicProxy();
UserDao dao = (UserDao) udp.getProxyInstance(new UserDaoOracleImpl());
dao.addUser();
}
}