There is a subtle difference between 2:
constructor and destructor is called when an instance is created and destroyed.
The before and after methods are called before and after the controller action.
In addition, you cannot guarantee that constructor and destructor are called before and after the action, but you can guarantee that for the before and after methods.
source share