重新实现关键方法，比以前流程简单很多