如何管理与PicoContainer的动态依赖?
-
21-08-2019 - |
题
说我有两个类A和B,具有取决于A B
public class A {}
public class B {
public B(A a) {}
}
这很容易在单个PicoContainer的解决乙
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(new A());
root.addComponent(B.class, B.class);
System.out.println(root.getComponent(B.class));
但是,我想有B
的不同实例为不同的会话,与A
的变量的实例。我想是这样的。
// during startup
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(B.class, B.class);
// later, initialize sessions
final MutablePicoContainer session = new PicoBuilder(root)
.implementedBy(TransientPicoContainer.class)
.build();
session.addComponent(new A());
// some request
System.out.println(session.getComponent(B.class));
上面的代码是不工作的,因为要求session
用于B
当它要求父容器root
它。 B
被发现存在,但只有内root
及其父母解决,导致一个UnsatisfiableDependenciesException.
有没有办法使这项工作没有什么好的办法?或者,这是一个反模式,而且我在错误的方式解决这个问题?
解决方案
我将登记在会话容器内乙以及。 B的任何其他的依赖,你可以在根容器离开。假设B对C.另一个依赖因此可以执行以下操作:
// during startup
final MutablePicoContainer root = new PicoBuilder().build();
root.addComponent(C.class, C.class);
// later, initialize sessions
final MutablePicoContainer session = new PicoBuilder(root)
.implementedBy(TransientPicoContainer.class)
.build();
session.addComponent(B.class, B.class);
session.addComponent(new A());
// some request
System.out.println(session.getComponent(B.class));
其他提示
解决不存在性能问题是不是一个好方法。你做任何分析,以验证问题?
如果不是,可考虑做,第一。
你启用容器上缓存(或您正在使用的Pico 1.x的)?
尝试阅读此时,也许禁用缓存足够来解决这个问题。
不隶属于 StackOverflow