You're not experiencing a bug. The spec requires that @PostConstruct/_at_PreDestroy annotations be processed when the bean comes into or out of scope.
There currently is no way to change this behavior.
Outside of asking the RequestStateManager if the current request is a post-back, and the other suggestions that have already been offered, the only thing I can think of is to partition your managed beans so that those that have expensive rendering requirements are not referenced
in attributes such as rendered or disabled as these expressions will be evaluated multiple times during the lifecycle processing of your view.
[Message sent by forum member 'rlubke' (rlubke)]
http://forums.java.net/jive/thread.jspa?messageID=341889