1. 程式人生 > >《Spring In Action》 讀書筆記(3) -- factory-method的應用

《Spring In Action》 讀書筆記(3) -- factory-method的應用

因為單例類的特殊性,spring對於單例類的注入提供了factory-method屬性,先上程式碼。

OneInstance類:

package spring.ioc02;

public class OneInstance {

    public static class GetInstanceHolder{
        static OneInstance oneInstance = new OneInstance();
    }

    public static OneInstance getInstance(){
        return GetInstanceHolder.oneInstance;
    }

    public
void finish(){ System.out.println("例項化完成"); } }

OneInstance 類裡面有個內部類GetInstanceHolder,它有一個靜態屬性oneInstance ,為了獲取這單例屬性,OneInstance 類提供了一個靜態方法getInstance(),它會返回oneInstance。

但是這個類既沒有構造體,也沒有屬性,所以要spring託管的話需要用到factory-method方法。

看spring xml配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd" default-lazy-init="true">
<description>Spring Configuration</description> <bean id="oneInstance" class="spring.ioc02.OneInstance" factory-method="getInstance" ></bean> </beans>

spring初始化的時候會執行spring.ioc02.OneInstance裡的getInstance獲取例項,以完成bean的裝配。

再看一下單元測試:

/**
     * ioc02
     * <bean> 中使用factory-method屬性  完成沒建構函式情況下的例項化(單例)
     */
    @Test
    public void test3() {
        ApplicationContext context = new ClassPathXmlApplicationContext("ioc02.xml");

        OneInstance instance = (OneInstance) context.getBean("oneInstance");
        instance.finish();
    }

輸出結果是: 例項化完成

相關推薦

Spring In Action讀書筆記3 -- factory-method應用

因為單例類的特殊性,spring對於單例類的注入提供了factory-method屬性,先上程式碼。 OneInstance類: package spring.ioc02; public class OneInstance { public

Spring In Action讀書筆記

implement efi 事務隔離 簡單 視圖 適合 組成 .html bool 第一章 1.Spring採用4種策略減少Java開發復雜度 基於POJO的輕量級和最小侵入性編程 依賴註入和面向接口實現松耦合 基於切面和慣例進行聲明式編程 通過切面和模板降低樣板式

tcp/ip 卷一 讀書筆記3為什麽既要有IP地址又要有MAC地址

維護 移動 理論 集線器 協議 合並 所有 變更 影響 網絡層 首先明確一點,並不是所有的網絡之間傳輸數據都需要mac地址和ip地址,比如說點對點線路之間的通信就沒有MAC地址,網絡層使用ipx協議時就沒有ip地址,但是在當前的主流網絡中,我們都使用ip地址和mac地址 既

程式碼大全 讀書筆記3軟體構建中的設計

1. 選擇程式語言 熟悉的語言 高階的語言 更能表達程式設計中各種概念的語言 每種語言都有自己的優點和弱點,要知道所選用語言的明確優點和弱點。 問問自己,採用的程式設計實踐是對你所用的程式語言的正確響應,還是受它的控制,記得“深入一種語言去程式設計”,不要僅“在一種語言上程式設計

spring in action 讀書筆記

一 spring使用的策略 1、基於pojo輕量級和最小侵入性程式設計 2、通過依賴注入和麵向介面實現鬆耦合 3、基於切面和慣例進行宣告式程式設計 4、通過切面和模板減少樣板式程式碼 二 依賴注入   -- xml   -- 程式碼方式 三 應用切面 安全

kafka 權威指南--讀書筆記-3向kafka寫入資料

(1)kafka生產者設計和元件 (1)不同的應用場景對訊息有不同的需求,即是否允許訊息丟失、重複、延遲以及吞吐量的要求。不同場景對Kafka生產者的API使用和配置會有直接的影響。 例子1:信用卡事務處理系統,不允許訊息的重複和丟失,延遲最大500ms,對吞吐量要求較高

認識django2.0讀書筆記3---第三章 檢視和URL配置

文件下載地址:Django_2.0_中文教程  http://download.csdn.net/detail/julius_lee/6620099 線上地址:http://djangobook.py3k.cn/2.0/ Django 2.0 Book 關鍵內容記錄,主要

Object-C高階程式設計讀書筆記3——Block的變數擷取

之前我們對於Block的定義為 “帶有自動變數值的匿名函式”。通過前面的介紹,知道了Block能夠保持傳入其中的變數的值,即使在Block外部這些傳入的值已經結束了其作用域,但是在Block被呼叫時,

Spring Cloud Alibaba學習筆記3 - Ribbon

1.手寫一個客戶端負載均衡器   在瞭解什麼是Ribbon之前,首先通過程式碼的方式手寫一個負載均衡器 RestTemplate restTemplate = new RestTemplate(); // 獲取請求示例 List<ServiceInstance> instances = dis

《JavaScript 模式》讀書筆記3— 字面量和建構函式1

  新的篇章開始了,本章開始,所有的內容都是十分有價值和意義的。本章主要的內容包括物件字面量、建構函式、陣列字面量、正則字面量、基本值型別字面量以及JSON等。在大家的工作和實際應用中也有一定的指導意義。   一、物件字面量   我們直接來先看一下程式碼: // 開始時定義一個空物件 var do

spring學習筆記3——bean配置細節註意

collect 1.5 之前 ice ble person name return 引用 1. 一個bean引用另外一個bean 當Person類中有一個屬性是Car,那麽該如何配置呢 person: package com.zj.spring; public class

Spring入門學習筆記3——事件處理類

aware super 不能 href his 應用 odi eap app 目錄 Spring中的事件處理 Spring內建事件 監聽Context事件 Example 自定義Spring事件 Spring中的事件處理 ApplicationContext 是Spr

spring cloud學習筆記3-- ribbon和feign

1.ribbon客戶端負載均衡介紹及基本使用 負載均衡想必都是比較清除的,在伺服器端的負載均衡主要是通過Nginx實現: 那麼客戶端的負載均衡呢 Ribbon是一個實現了客戶端負載均衡的元件,Netflix開源的,其主要功能是提供客戶端側負載均衡 Ribbon客戶

Spring原始碼解析--《SPRING技術內幕:深入解析Spring架構與設計原理》讀書筆記:IOC容器初始化過程

通過閱讀相關章節內容,Spring中IOC容器的載入中,我們需要了解下列幾個概念: Resource:是一個定位、訪問資源的抽象介面,包含了多種資源操作的基礎方法定義,如getInputStream()、exists()、isOpen()、getD

論文筆記3--Re-IDIn Defense of the Triplet Loss for Person Re-Identification

deep metric learning – 深度度量學習,也就是相似度學習 Classification Loss – 當目標很大時,會嚴重增加網路引數,而訓練結束後很多引數都會被摒棄。 Verification Loss – 只能成對的判斷兩張圖片的相似度,因此很難應用到目標聚類和檢索上

《演算法導論3讀書筆記演算法基礎

本篇內容主要涉及《演算法導論》一書中的第二章知識,涉及的內容有插入排序和歸併排序 插入排序 對於插入排序有個很明顯的顯示生活例子來幫助我們理解,插入排序的工作原理就像打撲克牌一樣,右手從桌面上拿起一張牌,然後再左手那一堆已經按牌面大小排好序的牌找

spring boot 學習筆記 3 Spring Boot 對web的支援

JSON 的支援 JSON (JavaScript Object Notation) 是一種輕量級的資料交換格式,易於閱讀和編寫,同時也易於機器解析和生成。JSON 採用完全獨立於語言的文字格式,但是也使用了類似於 C 語言家族的習慣(包括 C、C++、C#、Java、JavaScript、Pe

Spring JDBC學習筆記3:使用JdbcTemplate來獲取資料庫表和列的元資料

本篇文章才是我寫這一個系列文章的目的,原來我一般都是使用jdbc獲取資料庫的元資料,但是有點讓我很不爽,每次查資料表和列的時候都要自己寫“TABLE_NAME”和“COLUMN_HOME”等名稱,所以乾脆轉到JdbcTemplate實現上。通過JdbcTemplate獲取資

Spring + Cloud微服務實戰》讀書筆記————Spring Boot

1.Spring Boot簡介 1.1簡化配置 通過設計大量的自動化配置等方式來簡化Spring原有樣板化的配置,使得開發者可以快速構建應用。 1.2簡化依賴管理 Spring Boot 通過一系列Starter POMs的定義,讓我們整合各項功

java特種兵讀書筆記3-5——java程式設計師的OS之OOM

HeapSize OOM public static void main(String[] args) { List<String> list = Lists.newArrayList(); while (true) { list.add("hello");