My suggestions for Criteria:
- Ability to change config in a central location (easy with xml, hard with annotations)
- How adaptable to change is each mechanism (changes in methods, classnames, structure etc)
- Efficiency (how writing do I have to do)
But it's an interesting exercise though ultimately it does depend on the context and purpose of the beans you're creating.
For example, in the context of spring and annotations:
To configure lots of "workhorse" beans (standard beans which don't require customisation or access to 3rd party resources) annotations wins hands down. I know, I had to use xml to configure these and it was a nightmare, fortunately we had pseudo annotations in the form of xdoclet that helped. The key differences here is that when using annotations you don't have to specify the details of the class, that is known already.
But then another context where I want to configure the beans; change properties, plugin a different bean, create instances of already existing classes, access 3rd party resources (jndi resources etc) or configure an entity manager - xml is the only way to go. In this context I typically don't have access to the source code of the class, I'm creating beans from libraries.