1

我有一个类在它的构造函数中接受一个列表参数:

 public class A{

    private List<B> bs;

    public A(List<B> bs) {
        this.bs= bs;
    } 
}

我在容器中添加这个类,如下所示:

    A a = someObject.createData();
    pico.addComponent(a);

但我遇到了一个例外:

org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: A has unsatisfied dependency 'java.util.List<B>' for constructor 'public A(java.util.List)' from org.picocontainer.DefaultPicoContainer@5b970f7:6<|

有谁知道为什么会这样?

组成代码:

        MutablePicoContainer pico = new DefaultPicoContainer();
        SomeClass sc= new SomeClass();
        A a = sc.createbData();
        pico.addComponent(sc);
        pico.addComponent("bs", a.getB());
        pico.addComponent("a", A.class);
4

1 回答 1

2

此错误意味着您没有在容器中注册类“B”。应该有类似的东西:

B b = new B();
pico.addComponent(b);

'B' 也可以是一个接口,并且 Picocontainer 支持注入具有依赖关系的数组,所以这将起作用:

public interface B {}
public class B1 implements B {}
public class B2 implements B {}

public class Test {

    private List<B> stores;

    public Test(List<B> stores) {
        this.stores=stores;
    }
}

pico.addComponent("b1",B1.class);
pico.addComponent("b2",B2.class);
pico.addComponent("test",Test.class);

检查官方测试用例:https ://github.com/picocontainer/picocontainer/blob/0f8172b7b12483920d0e3e2fcadb793d7ead4432/script/script-core/src/test/com/picocontainer/script/xml/XMLContainerBuilderTestCase.java#L868

于 2020-05-04T15:32:10.050 回答