package org.fireproject.springsample;

import java.net.URL;
import java.io.IOException;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;

import org.apache.log4j.Logger;

public class HelloBeanFactory {
    /** ログ出力用. */
    private static Logger logger = Logger.getRootLogger();

    public static void main (String args[]) throws IOException {
        // ClassLoaderがうまくbeans.xmlを見付けられない場合や,
        // jarファイル内にbeans.xmlがある場合は,以下のようにする.
	URL url = HelloBeanFactory.class.getResource("beans.xml");
	Resource res = new UrlResource(url);
 	XmlBeanFactory factory = new XmlBeanFactory(res);

	String[] beanKeys = new String[]{
	    "awareSampleBean",
	    "namedSampleBean",
	};

	AwareSampleBean awareSampleBean = (AwareSampleBean)factory.getBean(beanKeys[0]);
	// AwareSampleBeanに設定されたBeanFactoryを検証(両者は同一オブジェクトのはず).
	logger.info("checkBeanFactory = " + awareSampleBean.checkBeanFactory(factory));

	// AwareSampleBeanに設定されたBeanFactoryを使用してNamedSampleBeanを取得.
	NamedSampleBean namedSampleBean1 = awareSampleBean.getNamedSampleBean();
	// 従来の方法でNamedSampleBeanを取得.
	NamedSampleBean namedSampleBean2 = (NamedSampleBean)factory.getBean(beanKeys[1]);
	// NamedSampleBeanはシングルトンとしているので,両者は同一オブジェクトのはず.
	logger.info("namedSampleBean1 == namedSampleBean2 ? : " + (namedSampleBean1 == namedSampleBean2));
    }
}