The actual annotation types that this post-processor checks for can be
configured through the "initAnnotationType"
and "destroyAnnotationType" properties.
Any custom annotation can be used, since there are no required annotation
attributes.

Init and destroy annotations may be applied to methods of any visibility:
public, package-protected, protected, or private. Multiple such methods
may be annotated, but it is recommended to only annotate one single
init method and destroy method, respectively.

postProcessBeforeInitialization

Apply this BeanPostProcessor to the given new bean instance before any bean
initialization callbacks (like InitializingBean's afterPropertiesSet
or a custom init-method). The bean will already be populated with property values.
The returned bean instance may be a wrapper around the original.

postProcessAfterInitialization

Apply this BeanPostProcessor to the given new bean instance after any bean
initialization callbacks (like InitializingBean's afterPropertiesSet
or a custom init-method). The bean will already be populated with property values.
The returned bean instance may be a wrapper around the original.

In case of a FactoryBean, this callback will be invoked for both the FactoryBean
instance and the objects created by the FactoryBean (as of Spring 2.0). The
post-processor can decide whether to apply to either the FactoryBean or created
objects or both through corresponding bean instanceof FactoryBean checks.