我有一个注入了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类中自动生成的。我想知道嵌套对象中是否支持这些注释用法。请建议。