Как сказал bkail, вы можете достичь этого следующим образом. Я не уверен, что на самом деле имел в виду ваш loader=some.properties.loader
, поэтому пропустил что-либо с этим, но предоставил опцию для этого на случай, если вы хотите загрузить, используя loader.getClass().getResourceAsStream ("filename.properties");
Сначала определите тип инъекции
@BindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD,
ElementType.PARAMETER })
public @interface PropertiesResource {
@Nonbinding
public String name();
@Nonbinding
public String loader();
}
Затем создайте продюсера для этого
public class PropertiesResourceLoader {
@Produces
@PropertiesResource(name = "", loader = "")
Properties loadProperties(InjectionPoint ip) {
System.out.println("-- called PropertiesResource loader");
PropertiesResource annotation = ip.getAnnotated().getAnnotation(
PropertiesResource.class);
String fileName = annotation.name();
String loader = annotation.loader();
Properties props = null;
// Load the properties from file
URL url = null;
url = Thread.currentThread().getContextClassLoader()
.getResource(fileName);
if (url != null) {
props = new Properties();
try {
props.load(url.openStream());
} catch (IOException e) {
e.printStackTrace();
}
}
return props;
}
}
Затем вставьте его в ваш именованный компонент.
@Inject
@PropertiesResource(name = "filename.properties", loader = "")
private Properties props;
Я сделал это, изучив документацию по сварке, где @HttpParam приведен в качестве примера здесь . Это как для сварного шва 1.1.0, для сварного шва 1.0.0 получить аннотацию можно следующим образом
PropertiesResource annotation = ip.getAnnotation(PropertiesResource.class);