使用静态工厂方法创建Bean
Being接口:
package com.dora.testingAnimal.ibeans;
public interface Being {
public void testBeing();
}
Dog和Cat两个类实现了Being接口:
package com.dora.testingAnimal.bean;
import com.dora.testingAnimal.ibeans.Being;
public class Dog implements Being{
private String msg;
public void setMsg(String msg) {
this.msg=msg;
}
public void testBeing() {
System.out.println(msg+ " 狗爱啃骨头");
}
}
package com.dora.testingAnimal.bean;
import com.dora.testingAnimal.ibeans.Being;
public class Cat implements Being{
private String msg;
public void setMsg(String msg) {
this.msg=msg;
}
public void testBeing() {
System.out.println(this.msg+" 猫爱吃鱼");
}
}
静态的工厂方法如下:
用静态工厂方法创建实例的时候,必须提供工厂类。工厂类必须包含产生实例的静态工厂方法。
package com.dora.testingAnimal.service;
import com.dora.testingAnimal.bean.Cat;
import com.dora.testingAnimal.bean.Dog;
import com.dora.testingAnimal.ibeans.Being;
public class BeingFactory {
public static Being getBeing(String arg) {
if("dog".equals(arg)) {
return new Dog();
}else if("cat".equals(arg)) {
return new Cat();
}else {
return null;
}
}
}
spring的配置文件如下,必须注意的是,class属性的值不是bean,而是工厂类;factory-method属性值为该工厂类的工厂属性;如果静态构造方法需要参数,则用<constructor-arg value="" />的方式来传递参数的值
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dog" class="com.dora.testingAnimal.service.BeingFactory" factory-method="getBeing">
<constructor-arg value="dog" />
<property name="msg" value="这是一只小狗" />
</bean>
<bean id="cat" class="com.dora.testingAnimal.service.BeingFactory" factory-method="getBeing">
<constructor-arg value="cat" />
<property name="msg" value="这是一只小猫" />
</bean>
</beans>
主程序,获取spring的cat和dog:
package com.dora.testingAnimal.service;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dora.testingAnimal.ibeans.Being;
public class SpringTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Being b1 = ctx.getBean("dog", Being.class);
b1.testBeing();
Being b2 = ctx.getBean("cat", Being.class);
b2.testBeing();
}
}