学习Spring时,对bean的三种实例化方式(构造器实例化、静态工厂实例化、实例工厂实例化)中的静态工厂与实例工厂有些区分不清,故作此记录
区分二者前需要先能区分静态方法与非静态方法的一些特性(先前SE阶段知识掌握不牢,全忘了):
-
静态方法:
public static Dao getDao() { return new Dao(); }
调用方式:类名调用、对象调用
-
非静态方法:
public Dao createDao() { return new Dao(); }
调用方式:只有对象调用(个人感觉"只有"二字是此刻两种方法最大的区别点)
接下来再看静态工厂与实例工厂
静态工厂
public class DaoFactory {
public static Dao getDao(){
return new Dao();
}
}
//静态方法有 类名调用 和 对象调用
//类名调用
Dao dao1 = DaoFactory.getDao();
//对象调用 (个人感觉也可以叫实例调用)
Dao dao2 = new DaoFactory().getDao();
实例工厂
public class DaoFactory {
public Dao createDao(){
return new Dao();
}
}
//非静态方法的调用方式只有对象调用(不知道叫实例调用对不对)
DaoFactory daoFactory= new DaoFactory();
daoFactory.createDao();
静态方法与非静态方法还有其他方面的区别,我在此处较为困惑的就是二者调用方式区别,搞明白二者调用方式上的区别,也就能明白两种工厂为何写成这样了。
至于静态与非静态方法的详细区别,ChatGPT是这样回答的