Spring&Spring MVC技术分享-非静态工厂方法返回其他类实例
作者:
22-426
,
2022-03-25 10:21:24
,
所有人可见
,
阅读 204
C02_D13_factory_method
//bean
public interface Animal {
void eat();
}
public class Pig implements Animal{
@Override
public void eat() {
System.out.println("这是猪,吃饲料~~~");
}
}
public class AnimalFactory {
//非静态工厂方法,也叫做实例工厂方法
public Animal getAnimal2() {
System.out.println("调用AnimalFactory类的实例工厂方法getAnimal2().................");
return new Pig();
}
}
//config-beans.xml
<!-- 调用一个工厂类的实例工厂方法(非静态工厂方法)生产另一个类的实例 -->
<!-- 这里是调用AnimalFactory类的实例工厂方法getAnimal2()生产Pig的实例 -->
<!-- 首先需要使用bean标记注册工厂类为spring管里的bean -->
<!-- 也就是如果调用非静态工厂方法,需要先有一个工厂类的对象,才能调用非静态方法 -->
<bean id="animalFactory" class="com.qdu.bean.AnimalFactory" />
<!-- 在注册Pig的bean标记上不再写class,会根据工厂方法的返回类型推断类型的
需要使用factory-bean指定工厂对象是哪个bean
需要使用factory-method指定工厂方法是哪个方法
-->
<bean id="animal" factory-bean="animalFactory"
factory-method="getAnimal2" />
//main
/**
* *使用非静态工厂方法返回其他类实例
*
* @author 22-426
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("config/beans3.xml");
Animal animal = (Animal) ctx.getBean("animal"); //此时只能通过 id或name获取bean,不能通过类型.
animal.eat();
}