Spring-Bean-工厂bean-静态工厂
静态工厂、实例工厂、FactoryBean接口
bean的创建默认就是框架利用反射new出来的bean实例
有一些复杂的类
工厂模式:工厂帮我们创建对象
有一个专门帮我们创建对象的类,这个类就是工厂
静态工厂:工厂本身不用创建对象;通过静态方法调用
实例工厂:工厂本身需要创建对象,先new工厂类,再调用工厂对象的方法
静态工厂
(1)创建静态工厂类、AirPlane类
public class AirPlaneStaticFactory { public static AirPlane getAriPlaneByCaptainName(String captainName) { System.out.println("静态工厂正在为你造飞机"); AirPlane airPlane=new AirPlane(); airPlane.setAirName("爱国者号"); airPlane.setCaptainName(captainName); airPlane.setColor("red"); airPlane.setCustomerNumber(200); return airPlane; } }
public class AirPlane { private String captainName; private Integer customerNumber; private String airName; private String color; public AirPlane() { } public void setCaptainName(String captainName) { this.captainName = captainName; } public void setCustomerNumber(Integer customerNumber) { this.customerNumber = customerNumber; } public void setAirName(String airName) { this.airName = airName; } public void setColor(String color) { this.color = color; } @Override public String toString() { return "AirPlane{" + "captainName='" + captainName + '\'' + ", customerNumber=" + customerNumber + ", airName='" + airName + '\'' + ", color='" + color + '\'' + '}'; } }
(2)配置文件
<!-- 静态工厂 --> <!-- class:指定静态工厂全类名 --> <!-- factory-method:指定哪个方法是工厂方法 --> <!-- constructor-arg:可以设置指定方法的参数 --> <bean id="airPlane" class="com.orz.spring.bean.AirPlaneStaticFactory" factory-method="getAriPlaneByCaptainName"> <constructor-arg name="captainName" value="李伟"/> </bean>
(3)测试
@Test public void test1() { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml"); AirPlane airPlane = applicationContext.getBean("airPlane", AirPlane.class); System.out.println(airPlane); }
(4)结果
静态工厂正在为你造飞机
AirPlane{captainName='李伟', customerNumber=200, airName='爱国者号', color='red'}