What is the use of BeanPostProcessor when we already have something in the form of initialization and destruction callbacks?

Why not write the logic of BeanPostProcessor inside the init() and destroy() methods?