这两个代码之间的区别是什么?它们都产生相同的结果。
使用缓存:
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
答案 0 :(得分:0)
在第一种情况下,您将对象实例化委托给容器,并缓存该托管实例。在第二种情况下,您将容器中的ready实例存储为Cookie类型。
托管组件(第一种情况)将依赖自动装配,也可能有生命周期事件等。在大多数情况下,您应该将实例化委托给容器。