Picoconntainer的几个问题
Car.java
public class Car {
private String name;
private Wheel wheel;
private Engine engine;
public Car(){}
public Car(Engine engine) {
this.engine = engine;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Wheel getWheel() {
return wheel;
}
public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
public String toString() {
return "name:" + name + "\n" +
engine.toString() + "\n"
+ wheel.toString();
}
}
-----------------------------------------------------------------------------------------
Engine.java
public class Engine {
public String toString() {
return "Engine";
}
}
-----------------------------------------------------------------------------------------
Wheel.java
public class Wheel {
public String toString() {
return ("wheel");
}
}
-----------------------------------------------------------------------------------------
测试代码段1:
public static void main(String[] args) {
MutablePicoContainer pico = new DefaultPicoContainer(
new SetterInjectionComponentAdapterFactory());
pico.registerComponentImplementation(Engine.class);
pico.registerComponentImplementation(Car.class);
pico.registerComponentImplementation(Wheel.class);
pico.registerComponentImplementation(String.class);
Car car = (Car) pico.getComponentInstance(Car.class);
System.out.println(car.toString());
}
将默认构造函数注入改为setter注入,那么engine无法注入
我想同时使用构造函数注入和setter注入可以吗?
另外我给engine加上setter方法,这样是可以通过的,但如果我把
pico.registerComponentImplementation(String.class);
去掉会报错org.picocontainer.defaults.UnsatisfiableDependenciesException异常
但我不想让name也使用setter注入,该怎么办?