Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加实例和缓存之间的区别_Java_Singleton_Picocontainer - Fatal编程技术网

Java 添加实例和缓存之间的区别

Java 添加实例和缓存之间的区别,java,singleton,picocontainer,Java,Singleton,Picocontainer,这两种代码有什么区别?两者产生相同的结果 带缓存: DefaultPicoContainer cachingContainer = new DefaultPicoContainer(new OptInCaching().wrap(new ConstructorInjection())); cachingContainer.as(Characteristics.CACHE).addComponent(Cookie.class); Cookie cookie1 = (Cookie)caching

这两种代码有什么区别?两者产生相同的结果

带缓存:

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
添加实例:

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

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

托管组件(第一种情况)将自动连接其依赖项,并且它们可能具有生命周期事件等。在大多数情况下,您应该将实例化委托给容器