Those who are interested in specific types of events (like the two from the group number 2 in the link above) doesn't have to be declared.
The point is that listeners from group 1 has to be called by the container every time something changes. You don't know what particular object can change - you are listening on all events.
The second group is quite different. The container will try to execute particular method on the object and it will execute (if it's provided) or not (if it's not provided). Container doesn't need any extra information about these kind of listeners - it just tries to execute this method.
Talking about HttpSessionBindingListener - the container just executes valueBound(-) on object after you add it to the session.