在学习动态代理时 遇到一个莫名奇妙的异常 还望各位大佬能提点一下。。代码如下:
接口:
public interface UserService {
public int saveUser(String dosth);
}
委托类:
public class UserServiceImpl implements UserService {
@Override
public int saveUser(String dosth) {
System.out.println(dosth);
return 1;
}
}
测试main方法:
public static void main(String[] args) {
UserService us = new UserServiceImpl();
UserService usp = (UserService) Proxy.newProxyInstance(us.getClass().getClassLoader(), us.getClass().getInterfaces(),new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//
System.out.println("before...");
Object obj = method.invoke(us, args);
System.out.println(obj);
System.out.println("after...");
return obj;
}
});
System.out.println(usp.saveUser("租房子"));
}
此时代码没什么问题:
运行结果: before...
租房子
1
after...
1
可是我把 invoke 方法里的 return obj 改为 return null 时 测试时会报空指针异常:
运行结果如下:
before...
租房子
1
after...
Exception in thread "main" java.lang.NullPointerException
at com.sun.proxy.$Proxy0.saveUser(Unknown Source)
at dynamicProxy.impl.dynamicProxy.main(dynamicProxy.java:27)
不是很理解 为什么感觉是 invoke 方法被执行了以后 还报我的代理对象空指针??搞了半天了~~~