有一些简单的方法可以将从类路径加载文件的Properties类注入到EJB(3.1)中吗?
这样的事情:
@Resource(name="filename.properties", loader=some.properties.loader)
private Properties someProperties;
谢谢,
博若
答案 0 :(得分:3)
正如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作为示例here。这是按照焊接1.1.0,在焊接1.0.0中,获取注释可以像这样完成
PropertiesResource annotation = ip.getAnnotation(PropertiesResource.class);
答案 1 :(得分:1)
如果您使用的应用程序服务器将WELD作为CDI实现(例如Glassfish 3.x或JBoss 7.x或Weblogic 12),那么您希望使用WELD 扩展名,在WELD文档中here
就像将它添加到您的POM一样简单
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-extensions</artifactId>
<version>${weld.extensions.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>