У нас есть ситуация, когда мы предоставляем внешнюю конфигурацию в виде Карты для наших запущенных программ. Я обнаружил, что JSR-330 Dependency Injection дает гораздо более чистый способ использовать эту конфигурационную карту в коде вместо того, чтобы передавать карту или использовать JNDI для ее получения.
@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: после изучения кинжала, который работает во время компиляции, а не во время выполнения, я обнаружил, что с нами обычно 10-20 на каждую программу мы могли бы жить с использованием метода @Provider
для каждой строки конфигурации, затем просматривает конфигурационную карту. Это позволяет определять поведение конкретного метода (включая значения по умолчанию), возможность предоставления javadoc и возможность использовать все эти методы в одном классе. Также он отлично работает с Weld из коробки. Я рассматриваю возможность написания более подробного объяснения в блоге.