Я подозреваю, что вы путаете Java bean и EJB (Enterprise Java Beans) - это разные понятия. На самом деле они сейчас почти одинаковы, но так было не всегда - история довольно запутанная.
Джеймс дает хорошее объяснение истории Java-бинов - они намного старше аннотаций (которые были введены в Java 1.5). EJB также намного старше, но они были радикально пересмотрены и теперь в основном являются Java-бинами со специальными аннотациями, выполняемыми в контейнере EJB.
На самом деле это прекрасный пример того, насколько полезными могут быть аннотации.
EJB-компоненты "старого стиля" (до версии 3 спецификации) были ужасными для кода. Вам нужно было определить (IIRC) два интерфейса, один класс реализации (который фактически не реализовывал интерфейсы) и XML-дескриптор, который связал их вместе. И если вы где-нибудь делали опечатку, ошибки компилятора не было - просто загадочная ошибка времени выполнения, которая не помогла вам сузить проблему.
Почему это так? Потому что он позволял EJB-контейнеру контролировать, как был вызван фактический код реализации, и прозрачно выполнять такие вещи, как контроль доступа, транзакции и репликация.
В спецификации EJB 3.0 это было радикально упрощено, так что теперь вам нужен только один класс (который может быть «классическим» Java Bean в случае бинов сущностей), который фактически реализует логику EJB - и аннотации, которые скажите EJB-контейнеру, как с ним обращаться. Вместо отдельного XML-файла информация о коде находится рядом с самим кодом в том же файле, и поскольку синтаксис аннотации проверяется компилятором, во время компиляции обнаруживается много потенциальных ошибок.