You misunderstand the @PostConstruct annotation.
A method annotated with should be invoked by the container after dependency injection was performed. It has not to be invoked by your applicative code.
So of course using @PostConstruct without container (EJB, Spring, Guice...) makes no sense.
The @PostConstruct doc states :
The PostConstruct annotation is used on a method that needs to be
executed after dependency injection is done to perform any
initialization.
To summarize :
- the container creates the bean by invoking the constructor
- the container sets the bean dependencies
- the
@PostConstruct method is invoked
Note that between the steps 1, 2 and 3, the container may perform other tasks for other beans but you should not worry about that as the javadoc also states that @PostConstruct method MUST be invoked before the class is put into service.