我很难弄清楚这一点,我将首先提到类结构:
- 汽车经销商
- 汽车厂
- 汽车(接口)
- BlueCar(汽车的实现)
- RedCar(汽车的实现)
- 胎
CarFactory 类有一个返回 Car 的工厂方法。在 Spring XML 文件 (test-spring.xml) 中,bean 定义如下所示:
<bean id="carDealer" class="...CarDealer>
<property name="car" ref="car"/>
</bean>
<bean id="carFactory" class="...CarFactory" />
<bean id="car" factory-bean="carFactory" factory-method="createCar" />
<bean id="tire" class="...Tire" />
工厂将返回 RedCar 或 BlueCar,调用代码不知道是哪一个。然而,假设这个例子,它返回 RedCar。
在我正在测试 RedCar 的测试类中,它的设置如下:
@SuppressWarnings("PMD")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-spring.xml" })
public class RedCarTest {
@Autowired
Car redCar;
在 RedCar 类中,它具有轮胎的属性:
public RedCar implements Car {
@AutoWired
private Tire tire;
}
在测试示例中,这工作正常,从工厂返回的 redCar 也被初始化,它的依赖项 Tire 也被初始化。问题是当我尝试从我的应用服务器运行它时。
在应用程序代码中,CarDealer 类引用了汽车:
public CarDealer {
private Car redCar;
}
调用此代码时,将创建 CarDealer(通过 spring)并创建 Car(通过 spring),但是 Car 的 Tire 属性为 null。我不明白为什么在测试代码下会创建 Tire 属性,但在应用程序中却没有。希望这是一个比之前提出的问题更清晰的问题。