Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}

apache-commons. Судя по приведенной ссылке, не только commons
apache-commons, что по сути одно, т. к. apache-commons — собирательное название группы библиотек от Apache Software Foundation).commons.Тем не менее, это три физически отдельных библиотеки
apache-commons. Не меняйте тезисы по ходу спора.import javax.enterprise.util.Nonbinding;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({FIELD, PARAMETER, METHOD})
@Retention(RUNTIME)
@Qualifier
@Inherited
@Documented
public @interface Configuration {
@Nonbinding String value();
@Nonbinding String config() default "default";
@Nonbinding boolean secret() default false;
@Nonbinding String defaultValue() default "";
}
@ApplicationScoped
class SomeBean {
@Inject
@Configuration(value = "some.property.name", defaultValue = "10")
private int propertyName;
}
class ConfigurationInjector {
// ...
@Produces
@Configuration("")
public Integer integerConfig(InjectionPoint point) {
Configuration configAnnotation = point.getAnnotated().getAnnotation(Configuration.class);
// вытаскиваем configAnnotation.value и используем в кач-ве ключа для поиска в конфигурационных файлах
}
// ...
}
IPropertyListener
Разработка библиотеки не преследовала коммерческих целей и преследовать не будет.
Чтение конфигурационных файлов в Java: nProperty