Spring&Spring MVC技术分享-静态工厂方法返回其他类实例
作者:
22-426
,
2022-03-25 10:15:38
,
所有人可见
,
阅读 141
C02_D13_factory_method
//bean
public interface Animal {
void eat();
}
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("这是狗,吃骨头!!!");
}
}
public class AnimalFactory {
//静态工厂方法
public static Animal getAnimal1() {
System.out.println("调用AnimalFactory类的静态工厂方法getAnimal1().................");
return new Dog();
}
}
//config-beans.xml
<!-- 可以使用一个工厂类的静态工厂方法产生一个需要的bean实例 -->
<!-- 这里希望使用AnimalFactory类的静态工厂方法getAnimal1()生产Dog实例 -->
<!-- 这样class指定的是工厂类的类型,factory-method指定的是静态工厂方法的名称 -->
<!-- 注意:这里使用AnimalFactory的工厂方法生产的是Dog实例 -->
<!-- 所以id为animal的bean对应的是Dog类型的bean -->
<bean id="animal"
class="com.qdu.bean.AnimalFactory"
factory-method="getAnimal1" />
<!-- 如果希望调用AA类的静态工厂方法generate()生产BB类的实例,
则class写AA的类型,factory-method写generate,bean表示的BB的实例 -->
//main
/**
* *使用静态工厂方法返回其他类实例
*
* @author 22-426
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("config/beans2.xml");
// Animal animal = (Animal) ctx.getBean("animal");
Animal animal = (Animal) ctx.getBean(Dog.class); //通过类型获取Bean,不能写Beanclass属性指定的类型,要写具体生成的Bean类型.
animal.eat();
}