Самая важная особенность, которую CDI противопоставил Guice, - это то, что стандартная часть Java EE 6.
Важность этого нельзя недооценивать, поскольку это означает, что CDI является стандартом DI, который следует использовать при кодировании веб-приложений.
Некоторое время назад я взглянул на технологии, чтобы определить, как у нас может быть стандартный дистрибутив ядра - соответственно подготовленный - где мы могли бы добавлять дополнительные модули по своему желанию, которые могли бы переопределять существующие функциональные возможности без необходимости изменения основных модулей. , То есть добавьте дополнительную банку, и функциональность активируется автоматически.
Оказалось, что лучший способ сделать это для кодовой базы, используемой как в настольных, так и в веб-приложениях, - это использовать аннотации JSR-330 для нашего кода, а затем использовать CDI или Guice (SVN, выходящий реальным). скоро сейчас в 3.0) как двигатель.
После нескольких проектов я обнаружил, что мне больше нравится конфигурация Guice, а не непрозрачная магия, происходящая в Weld. Кроме того, я обнаружил, что для того, чтобы сделать то, что мы хотим, как описано выше, с помощью Weld, я должен пометить класс в дополнительном фляге как @Alternative, а затем упомянуть в beans.xml, что я хочу, чтобы альтернативный класс применялся (а устойчив к рефакторингу).
Но, в целом, JSR-330 позволяет нам делать то, что раньше было очень утомительным и хрупким (потому что new
связывает так сильно), и это большая победа. Я настоятельно рекомендую заглянуть в DI, если у вас возникнет такая необходимость.