未知數據

          簡,是一種境界.

          首頁 新隨筆 聯系 聚合 管理
            8 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks
          配置工廠Bean
          通常由應用程序直接使用new創建新的對象,為了將對象的創建和使用相分離,采用工廠模式,即應用程序將對象的創建及初始化職責交給工廠對象.
          一般情況下,應用程序有自己的工廠對象來創建bean.如果將應用程序自己的工廠對象交給Spring管理,那么Spring管理的就不是普通的bean,而是工廠Bean.
          調用getBean()方法,Spring返回的不是直接創建的Bean的實例,而是由工廠Bean創建的Bean實例.
          一般在Spring中配置工廠Bean,有3中不同類型的工廠Bean的配置.
          1.靜態工廠
          創建具體Bean實例的是靜態方法

          import java.util.Random;
          public class StaticFactoryBean {
          public static Integer createRandom() {
          return new Integer(new Random().nextInt());
          }
          }
          將其納入Spring容器來管理,需要通過factory-method指定靜態方法名稱
          <bean id="random"
          class="example.chapter3.StaticFactoryBean"
          factory-method="createRandom" //createRandom方法必須是static的,才能找到
          scope="prototype"
          />
          測試:
          public static void main(String[] args) {

          XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));
          System.out.println(factory.getBean("random").toString());
          //StaticFactoryBean sfb = (StaticFactoryBean)factory.getBean("random");
          //System.out.println(sfb.createRandom().toString());
          //調用getBean()時,返回隨機數.如果沒有指定factory-method,會返回StaticFactoryBean的實例,即返回工廠Bean的實例
          }

          2.實例工廠
          創建具體Bean實例的是實例,不是靜態方法

          import java.text.SimpleDateFormat;
          import java.util.Date;
          public class InstanceFactoryBean {
          private String format = "yy-MM-dd HH:mm:ss";
          public void setFormat(String format) {
          this.format = format;
          }
          public String createTime() {
          return new SimpleDateFormat(format).format(new Date());
          }
          }
          配置文件需要配置兩個bean:第一個Bean和普通的Bean沒有區別,第二個bean定義如何通過工廠Bean獲取Bean,需要指定工廠Bean的名稱和方法名稱
          <bean id="instanceFactoryBean" class="example.chapter3.InstanceFactoryBean">
          <property name="format" value="yyyy-MM-dd HH:mm:ss" />
          </bean>
          <bean id="currentTime"
          factory-bean="instanceFactoryBean"
          factory-method="createTime"
          />
          測試:
          public static void main(String[] args) {

          XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));
          System.out.println(factory.getBean("currentTime"));

          }
          3.實現FactoryBean接口
          public class PiFactoryBean implements FactoryBean {
          public Object getObject() throws Exception {
          return new Double(3.14159265358979);
          }
          public Class getObjectType() {
          return Double.class;
          }
          public boolean isSingleton() {
          return true;
          }
          }
          實現了FactoryBean接口的Bean,不再被視為普通的Bean.Spring會自動檢測.
          <bean id="pi" class="example.chapter3.PiFactoryBean" />
          測試
          public static void main(String[] args) throws Exception {

          XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));
          System.out.println(factory.getBean("pi"));//返回PiFactoryBean 的工廠方法getObject返回的Double對象實例
          //PiFactoryBean p = (PiFactoryBean)factory.getBean("&pi"); //加"&"返回工廠Bean的實例.
          //System.out.println(p.getObject());
          }

          posted on 2008-02-28 12:30 未知數據 閱讀(473) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 神农架林区| 彰化县| 英吉沙县| 砚山县| 平谷区| 镇巴县| 洮南市| 紫阳县| 丰顺县| 秦安县| 平谷区| 常熟市| 方城县| 张掖市| 金沙县| 平安县| 申扎县| 靖宇县| 吉林省| 嫩江县| 镇安县| 高唐县| 安阳市| 棋牌| 松江区| 阿图什市| 郧西县| 扬州市| 博客| 景德镇市| 吐鲁番市| 东乡| 呈贡县| 多伦县| 清水县| 寻甸| 通榆县| 桐城市| 永兴县| 吉木萨尔县| 望江县|