There are lots of initialization options available in spring bean life cycle.

**init-method**, **PostConstruct** annotation, **afterPropertiesSet**, Bean **post-initialization** and even class **constructor**. All these can be used for initializing a bean. 

I got confused when to use one these over other. Moreover, is there any case we may need to use all these option in a single Bean? If yes please example would be good.

Really looking forward to get some great answers.