Jakarta ee EJB3.1属性文件注入

Jakarta ee EJB3.1属性文件注入,jakarta-ee,ejb-3.1,Jakarta Ee,Ejb 3.1,是否有一些简单的方法将类中加载了文件的属性类从类路径注入EJB(3.1) 大概是这样的: @Resource(name="filename.properties", loader=some.properties.loader) private Properties someProperties; 谢谢, Bozo正如bkail所说,您可以通过以下方式实现这一点。我不确定您的loader=some.properties.loader真正的意思是什么,因此跳过了使用它的任何操作,但提供了一个选项,

是否有一些简单的方法将类中加载了文件的属性类从类路径注入EJB(3.1)

大概是这样的:

@Resource(name="filename.properties", loader=some.properties.loader)
private Properties someProperties;
谢谢,


Bozo

正如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);

如果您使用的应用服务器将WELD作为CDI实现(Glassfish 3.x或JBoss 7.x或Weblogic 12是示例),那么您希望使用WELD扩展,这在WELD文档中有说明

只需将其添加到POM中即可

<dependency>
   <groupId>org.jboss.weld</groupId>
   <artifactId>weld-extensions</artifactId>
  <version>${weld.extensions.version}</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

org.jboss.weld
延长焊缝
${weld.extensions.version}
聚甲醛
进口

在标准JavaEE中不容易。我怀疑CDI可以用@Inject+@产品做类似的事情,但我对CDI不够熟悉。(留下这篇评论,希望其他人可以填写细节。)