机器人
public class Robot {
Robot(){
System.out.println("有只机器人被创建了");
}
}
工厂bean有两种
①静态方法生产对象
②普通方法生产对象
===========①=============
静态方法机器人工厂
public class RobotFactory {
public static Robot getRobot(){
System.out.println("机器人工厂生产机器人中……");
return new Robot();
}
}
注册为bean
<bean class="org.example.entity.RobotFactory" factory-method="getRobot"></bean>
(此时不能再注册Robot类的bean,否则在使用getBean(Robot.class)时,spring将不知道调用哪个bean)
Main函数中运行
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
Robot r1 = context.getBean(Robot.class);
可以直接由上面的工厂bean获得Robot对象
==============②=============
普通方法机器人工厂
public class RobotFactory {
public Robot getRobot(){
System.out.println("机器人工厂生产机器人中……");
return new Robot();
}
}
这种情况只能先把RobotFactory注册为bean,再注册一个bean,在此bean中指定factory-bean属性,属性值即为RobotFactory的bean的名字,同时在factory-method属性中指定getRobot方法。
因此需要给RobotFactory添加name属性,不然Robot不知道他的工厂bean叫什么名字
<bean class="org.example.entity.RobotFactory" name="RobotFactoryBean" ></bean>
<bean factory-bean="RobotFactoryBean" factory-method="getRobot" ></bean>
同方法①使用getBean(Robot.class)获得Robot实例