У меня есть создание фабричного компонента Spring в .xml
<bean id="tool" class="pojo.ToolFactory">
<property name="factoryId" value="9090"/>
<property name="toolId" value="1"/>
</bean>
и ToolFactory
код, подобный этому, который реализует FactoryBean
и создает bean-компонент Tool:
public class ToolFactory implements FactoryBean<Tool> {
private int factoryId;
private int toolId;
public ToolFactory() {
}
public ToolFactory(int factoryId, int toolId) {
this.factoryId = factoryId;
this.toolId = toolId;
}
@Override
public Tool getObject() throws Exception {
return new Tool(toolId);
}
@Override
public Class<?> getObjectType() {
return Tool.class;
}
@Override
public boolean isSingleton() {
return false;
}
public int getFactoryId() {
return factoryId;
}
public void setFactoryId(int factoryId) {
this.factoryId = factoryId;
}
public int getToolId() {
return toolId;
}
public void setToolId(int toolId) {
this.toolId = toolId;
}
@Override
public String toString() {
return "ToolFactory{" +
"factoryId=" + factoryId +
", toolId=" + toolId +
'}';
}
}
когда я использую @Autowired
, чтобы получить бин с именем «tool», тип которого может быть Tool
, что не странно, но когда я устанавливаю бин с типом ToolFactory
, он также может быть скомпилирован и беги правильно, тогда я запутался, кто-нибудь может дать мне объяснение? спасибо ~
вот код @Autowired
:
@Autowired
private Tool tool; //i can understand this
@Autowired
private ToolFactory tool; // but this can be compiled and run correctly, which is confused
и затем, когда я использую @Autowired
с @Qualifier
, тип Tool
или ToolFactory
также может быть распознан:
@Autowired
@Qualifier("tool")
private Tool tool;
@Autowired
@Qualifier("tool")
private ToolFactory tool;
почему bean-компонент с именем "tool" может иметь тип Tool или ToolFactory?