小编Myt*_*ica的帖子

CDI具有非托管对象

假设我有两个类,首先是一个没有任何属性,字段或注释的类:

public class B {}
Run Code Online (Sandbox Code Playgroud)

和一个注入B的类,如下所示:

public class A {
    @Inject
    private B b;

    public B getB() {
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在A级在我们使用之前是没用的,所以有两种选择:

  • @Inject它
  • 使用可靠的"新A()"手动构造它

如果A被注入,CDI管理它并且足够注入B,其具有隐含的@Dependent范围.很酷,就是我想要的.

但是,如果我手动构造A(假设在工厂或构建器中),CDI完全忽略我的对象并且不会注入类型B的对象.

示例我在谈论它什么时候不起作用,这里对象a将始终保持为null:

public class Builder {
    @Inject
    private A a;

    public static Builder ofTypeSomething() {
        // do some magic here
        return new Builder();
    }

    private Builder() {
        // and some more here
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

A类是一个有效的托管bean,并且有一个有效的范围,就像B类一样.即使我将@Producer添加到静态方法,它也不会改变任何东西(这很好,因为静态方法的想法是调用它,不要在任何地方注入Builder).

java java-ee cdi

7
推荐指数
1
解决办法
5355
查看次数

一对多的孩子已经坚持没有父母

我正在将Google App Engine与Google Web Toolkit结合使用来编写错误跟踪器(以了解这些技术的功能).

以谷歌代码的问题跟踪器为模型,我决定一个问题可以有0个或更多标签,可以预先定义(让我们说在设置中).

标签类(CustomLabel):

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class CustomLabel implements Serializable {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
    private String encodedKey;

    @Persistent
    @Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
    private Long keyId;

    /**
     * label caption.
     */
    @Persistent
    private String caption;

    // Unimportant getters / setters
}
Run Code Online (Sandbox Code Playgroud)

现在是父类(问题):

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Issue implements Serializable {
    private static final long serialVersionUID = 1L;

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    // Replacing the Long key by this key …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine persistence

2
推荐指数
1
解决办法
3925
查看次数

标签 统计

java ×2

cdi ×1

google-app-engine ×1

java-ee ×1

persistence ×1