当前位置: 首页 > 面试题库 >

注入不适用于嵌套对象[Jersey 2.22.1]

羊舌成周
2023-03-14
问题内容

我有一个注入了Facade对象的Jersey资源。这是在我的配置ResourceConfig,并且立面被很好地注入了。外墙包含一个DAO类,该类也应注入并在同一类中配置ResourceConfig。现在到我的问题;DAO类为null。因此,不注射。

@ApplicationPath("/service")
public class SystemSetup extends ResourceConfig {

public SystemSetup() {
    packages(false, "com.foo.bar");
    packages("org.glassfish.jersey.jackson");
    register(JacksonFeature.class);

    final LockManager manager = getLockManager();
    final SessionFactory sessionFactory = getSessionFactory();
    register(new AbstractBinder() {
        @Override
        protected void configure() {
            bindFactory(InjectFactory.getDaoFactory(sessionFactory)).to(Dao.class).in(Singleton.class);
            bindFactory(InjectFactory.getFacadeFactory(manager)).to(Facade.class).in(Singleton.class);
        }
    });
}
 @Path("/")
 @Produces("text/json")
 public class ViewResource {

    @Inject
    private Facade logic;
public class Facade {

    @Inject
    private Dao dao; //Not injected

工厂实例非常简单。他们只是调用构造函数并将参数传递给它。

奇怪的是,当我使用bind(Class object)而不是bindFactory时,这绝对可以正常工作。

编辑

工厂工厂

class InjectFactory {

    static Factory<Dao> getDaoFactory() {
        return new Factory<Dao>() {
            @Override
            public Dao provide() {
                return new Dao(new Object());
            }

            @Override
            public void dispose(Dao dao) {}
        };
    }

    static Factory<Facade> getFacadeFactory() {
        return new Factory<Facade>() {

            @Override
            public Facade provide() {
                return new Facade();
            }

            @Override
            public void dispose(Facade facade) {}
        };
    }
}

问题答案:

与大多数Di框架一样,当您开始自己实例化事物时,通常是将框架排除在等式之外。这对于Factory实例以及工厂创建的对象都适用。因此Facade,除了将实例注入资源类之外,该实例永远不会与框架接触。

ServiceLocator如果您想自己创建对象,则可以持有,并自己明确注入对象。这里有几个选择。

1)注入ServiceLocator到所述Factory实例,然后注入Facade实例。

static Factory<Facade> getFacadeFactory() {
    return new Factory<Facade>() {

        @Context
        ServiceLocator locator;

        @Override
        public Facade provide() {
            Facade facade = new Facade();
            locator.inject(facade);
            return facade;
        }

        @Override
        public void dispose(Facade facade) {}
    };
}

@Inject
public SystemSetup(ServiceLocator locator) {
    packages("foo.bar.rest");
    packages("org.glassfish.jersey.jackson");
    register(JacksonFeature.class);

    register(new AbstractBinder() {
        @Override
        protected void configure() {
            bindFactory(InjectFactory.getDaoFactory()).to(Dao.class);

            Factory<Facade> factory = InjectFactory.getFacadeFactory();
            locator.inject(factory);
            bindFactory(factory).to(Facade.class);
        }
    });
}

2)或绑定一个Factory ,然后让框架注入ServiceLocator

public static class FacadeFactory implements Factory<Facade> {

    @Context
    ServiceLocator locator;

    @Override
    public Facade provide() {
        Facade facade = new Facade();
        locator.inject(facade);
        return facade;
    }

    @Override
    public void dispose(Facade facade) {}
}

register(new AbstractBinder() {
    @Override
    protected void configure() {
        bindFactory(InjectFactory.getDaoFactory()).to(Dao.class);
        bindFactory(InjectFactory.FacadeFactory.class).to(Facade.class);
    }
});


 类似资料:
  • 六羟甲基三聚氰胺六甲醚。。在某些情况下,我有一个对象需要在hazelcast实例上执行操作。所以我实现了HazelcastInstanceAware接口,但这似乎不适用于嵌套类。。。 以下核心输出"null"到控制台: 公共类NullError实现可序列化,HazelcastInstanceAware{私有瞬态HazelcastInstance instance1;私有瞬态HazelcastIns

  • 我试图通过将请求参数直接绑定到用户实体来简化我的代码,而不是一个字段一个字段地复制值,但是我似乎不能通过这种方式得到验证。 控制器: 验证器: 模型(注意嵌套对象用@Valid标注): 问题是只有密码和重新密码字段被正确验证,用户类中的验证注释被忽略,任何密码匹配的请求都通过,但它应该会出现错误。空密码或不同的密码会按预期出现错误。

  • 问题内容: 有人告诉我: 垂直对齐仅适用于内联,内联块,图像和表格元素。 与text-align不同,它必须应用于子元素,而不是应用于父元素。 但是,当我尝试在内联块元素上设置垂直对齐中间时,它不起作用。为什么? 问题答案: 这是行不通的,因为它vertical- align设置了行内内容相对于其行框而不是其包含块的对齐方式: 此属性影响由inline-level元素生成的框的线框内的垂直位置。

  • Elasticsearch排序不适用于嵌套字段。它显示了升序和降序的混合值。比如40,30,50。它不是按升序显示的:30,40,50 查询:

  • 我试图在嵌套对象中使用DynamoDB注释,如下所示: 我没有看到上面的属性是在UserAction类中自动生成的。我想知道嵌套对象中是否支持这些注释用法。请建议。