2

这两个代码有什么区别?它们都产生相同的结果。

使用缓存:

DefaultPicoContainer cachingContainer = new DefaultPicoContainer(new OptInCaching().wrap(new ConstructorInjection()));

cachingContainer.as(Characteristics.CACHE).addComponent(Cookie.class);

Cookie cookie1 = (Cookie)cachingContainer.getComponent(Cookie.class);
Cookie cookie2 = (Cookie)cachingContainer.getComponent(Cookie.class);

assert(cookie1 == cookie2); // Same instance: OK

添加实例:

DefaultPicoContainer instanceContainer = new DefaultPicoContainer(new ConstructorInjection());

instanceContainer.addComponent(Cookie.class, new Cookie());

Cookie cookie3 = (Cookie)instanceContainer.getComponent(Cookie.class);
Cookie cookie4 = (Cookie)instanceContainer.getComponent(Cookie.class);

assert(cookie3 == cookie4); // Same instance: OK
4

1 回答 1

0

在第一种情况下,您将对象实例化委托给容器,并且该托管实例被缓存。在第二种情况下,您将准备好的实例作为 Cookie 类型存储在容器中。

托管组件(第一种情况)将自动装配它们的依赖关系,它们也可能具有生命周期事件等。在大多数情况下,您应该将实例化委托给容器。

于 2017-08-04T20:53:07.873 回答