在学习spring bean的实例化方式的时候遇到的一个问题,Spring bean实例化有3种方法
1、构造器生成 2、静态工厂方法 3、实例工厂方法
那么问题来了,什么是静态工厂方法,什么是实例工厂方法?
静态工厂方法:
顾名思义就是直接可以通过静态方法来实例化一个对象
public class HelloWorldFactory {
public static HelloWorld getInstance(){
return new HelloWorld();
}
}
HelloWorldFactory.getInstance()
创建 HelloWorld 对象直接可以调用getInstance方法来进行实现
实例工厂方法:
就是先创建类对象,如何通过对象来调用创建实例对象的方法
public class HelloWorldFactory {
public HelloWorld createHelloWorld(){
return new HelloWorld();
}
}
HelloWorldFactory helloFactory = new HelloWorldFactory();
helloFactory.createHelloWorld();
一、什么是静态工厂方法?
又叫简单工厂模式,与工厂模式不同,其是通过专门定义一个类来负责创建其他类的实例,其实例通常拥有共同父类,其普遍实现主要依靠Java的反射机制。
二、好处怎么体现?
1、它们有名称
2、它们可以返回原返回类型任意子类型的对象。
public interface Food {
/**
* 使得所有食物都有一个共有的introduce方法
*/
public void introduce();
}
/**
* 定义食物的子类:鱼
*/
public class Fish implements Food{
@Override
public void introduce() {
System.out.println("i am a fish");
}
}
/**
* 食物的子类,水果
*/
public class Fruit implements Food {
@Override
public void introduce() {
System.out.println("i am the fruit");
}
}
/**
* 通过反射机制实现的工厂
*/
public class FoodFactory {
public static Food getFood(String type) {
Food food = null;
try {
food = (Food) Class.forName("info.zhw." + type).newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return food;
}
}