У нас есть ситуация, когда мы предоставляем внешнюю конфигурацию в виде Карты для наших запущенных программ. Я обнаружил, что JSR-330 Dependency Injection дает гораздо более чистый способ использовать эту конфигурационную карту в коде вместо того, чтобы передавать карту или использовать JNDI для ее получения.Как легко вводить String константы с помощью Weld?
@Inject @Named("server.username") String username;
позволяет реализовать JSR-330 в этом поле автоматически.
С Guice я могу установить значение с
bindConstant().annotatedWith(Names.named(key)).to(value);
Я хотел бы быть в состоянии сделать то же самое в Weld (BIND «server.username», чтобы, например, «Foobar»), и я понимаю, что механизм скорее всего, beans.xml, но я бы предпочел просто «подать эту карту на Weld, пожалуйста», кодовую альтернативу. Что было бы хорошим способом сделать это?
EDIT 2013-10-16: Посмотрев в Dagger, который работает во время компиляции, а не во время выполнения, я обнаружил, что с нами, как правило, имеющие 10-20 в программе мы могли бы жить с наличием метода @Provider
для каждой конфигурации которая затем просматривает конфигурационную карту. Это позволяет определять поведение конкретного метода (включая значения по умолчанию), возможность предоставления javadoc и возможность использовать все эти методы в одном классе. Также он отлично работает с Weld из коробки. Я рассматриваю возможность написания более подробного объяснения в блоге.
Спасибо за вашу тяжелую работу. Начато оформление бумажных документов. –
Что касается «сбоя при развертывании, если значение отсутствует». В нашей ситуации - ввод значений конфигурации - это особенность! –
@ Thorbjørn Ravn Andersen Спасибо за щедрость. Это был драматический всплеск репутации. – SplinterReality