与大多数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) {} };}@Injectpublic 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); }});

![注入不适用于嵌套对象[Jersey 2.22.1] 注入不适用于嵌套对象[Jersey 2.22.1]](http://www.mshxw.com/aiimages/31/498668.png)
