我使用InvocationHandler自定义了一个事务处理类,但是在测试时发现会报空指针异常,是什么原因?
使用的是jdk 1.8
public class TransactionHandler implements InvocationHandler {
private final Object target;
public TransactionHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Connection conn = DbUtil.getConnection();
try {
conn.setAutoCommit(false);
method.invoke(target, args);
conn.commit();
} catch(SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
System.out.println(e.getMessage());
conn.rollback();
conn.setAutoCommit(true);
}
return null;
}
}
测试的代码
public static void main(String[] args) throws SQLException {
User user = new User();
user.setUserName("test6");
user.setPassword("test6");
UserService userService = new UserServiceImpl();
InvocationHandler transactionHandler = new TransactionHandler(userService);
UserService userServiceProxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), transactionHandler);
System.out.println(userServiceProxy.save(user));
}
会在最后输出的时候报空指针异常,但是数据可以正确的插入数据库,出错也可以回滚。