Strutsを読む ~3日目: ActionServlet#init()~
テーマ: initInternal() は何をするメソッド?
<深度:1>コードとしては、下記の通りで、ActionResources.propertiesの内容をインスタンス化する。
#########################################################
protected String internalName = "org.apache.struts.action.ActionResources";
protected MessageResources internal = null;
protected void initInternal(){
internal = MessageResources.getMessageResources(internalName);
}
#########################################################
<深度:2>MessageResourcesクラスを読み解く
MessageResources.getMessageResources("org.apache.struts.action.ActionResources");
実装 ↓ ※下記2行が何をしているかを読み解く。
MessageResourcesFactory defaultFactory = MessageResourcesFactory.createFactory();
return defaultFactory.createResources("org.apache.struts.action.ActionResources");
まずは、
<深度:3>MessageResourcesFactoryはどういうクラス?
所謂ファクトリパターンにおいてオブジェクトを生成するクラス。
ファクトリパターンの利用シチュエーションとしては、
たとえば、条件によってデータファイルの読み込みに使うオブジェクトが異なる場合、
CSV形式であればCSVDataReaderオブジェクトを、XML形式であれば
XMLDataReaderオブジェクトを生成するような場合に利用する。
ファクトリクラスでは、オブジェクトの生成のみを行います。
オブジェクト生成の専門家であるファクトリが、オブジェクトの使用者から生成するオブジェクトの種類や生成手順を隠してくれます。
オブジェクトの使用者はファクトリに生成を依頼するだけで、オブジェクトの生成手順や種類を意識する必要はなく、望むオブジェクトを使用できる状態で手に入れることができる。
結局下記メソッドが何をやっているかを読み解くのが鍵。
defaultFactory.createResources("org.apache.struts.action.ActionResources");