We can create proxy for the target bean in the postProcessAfterInitialization() method of BeanPostProcessor.
Or we can use AOP - and proxy will also be created through Dynamic Proxy or CGlib.
What is the difference?
When should we use BPP and when AOP?