1. 程式人生 > >Spring通過IOC幫我們做火雞

Spring通過IOC幫我們做火雞

前言

什麼是IOC,IOC是控制反轉,打個比方,本來你自己new一隻火雞,現在讓控制權交給spring,它使用依賴注入的技術做給你吃。

一、IOC——setter注入

1、準備dmo

首先準備一隻火雞

public class Turkey {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然後準備一個廚房, 屬性包含火雞

public class Cookhouse {
    private int id;
    private String name;
    private Turkey turkey;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Turkey getTurkey() {
        return turkey;
    }

    public void setTurkey(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public String toString() {
        return "Cookhouse{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

2、applicationContext.xml配置

給bean起個名字,class就是dmo類,property name是屬性名,value和ref是屬性值,如果屬性是物件要使用"ref="

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean name="t" class="Turkey">
        <property name="name" value="usaTurkey"/>
    </bean>

    <bean name="c" class="Cookhouse">
        <property name="name" value="cnCookhouse"/>
        <property name="turkey" ref="t"/>
    </bean>
</beans>

3、新增spring的相關JAR包

JAR包以及其它知識詳見網上一個大神的專案:自學網站

4、spring幫我們在廚房做火雞

讓spring幫我在廚房做火雞吃,spring根據核心配置檔案applicationContext.xml建立了一箇中國廚房,然後做了只美國火雞。

public class TestSpring {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
        Cookhouse c = (Cookhouse)applicationContext.getBean("c");
        System.out.println(c.getName()+"做了只"+c.getTurkey().getName());
    }
}

執行結果:

二、IOC——註解注入

有小夥伴說:火雞做太慢,等餓了
spring說:那我來用註解注入的方式給你做火雞

1、@Autowired對屬性的註解

首先優化物件的注入方式,applicationContext.xml新增<context:annotation-config/>,表示告訴Spring要用註解的方式進行注入,<property name="turkey" ref="t"/>就可以註釋掉了,我們只需要在Cookhouse類的屬性Turkey上面加上@Autowired就可以注入火雞了

@Autowired
    private Turkey turkey;

2、@Component對Bean的註解

然後優化Bean的注入方式,applicationContext.xml的Bean注入看上去還是比較繁瑣,我們再簡化下,只新增:

<context:component-scan base-package="com.fantasy.dmo"/>
其作用是告訴Spring,bean都放在這個包下

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!--bean都放在這個包下-->
    <context:component-scan base-package="com.fantasy.dmo"/>
</beans>

因為Bean移到dmo了,所以在dmo分別給Cookhouse和Turkey加上註解@Component,然後給它們的屬性name命名。

@Component("c")
public class Cookhouse {
    private int id;
    private String name="cnCookhouse";
    @Autowired
    private Turkey turkey;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Turkey getTurkey() {
        return turkey;
    }

    public void setTurkey(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public String toString() {
        return "com.fantasy.dmo.Cookhouse{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

@Component("t")
public class Turkey {
    private int id;
    private String name="usaTurkey";

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

執行程式發現結果一樣,又省去很多配置,香噴噴的火雞做的更快了呢~

相關推薦

Spring通過IOC我們火雞

前言 什麼是IOC,IOC是控制反轉,打個比方,本來你自己new一隻火雞,現在讓控制權交給spring,它使用依賴注入的技術做給你吃。 一、IOC——setter注入 1、準備dmo 首先準備一隻火雞 public class Turkey { private int id; private

spring-mvc我們了哪些事

hibernate使用起來,也不太方便;hibernate想要返回的結果是物件,需要將使用到的每一個類的路徑寫到hibernate配置下,而spring只需要在配置檔案中寫下掃描包的路徑;往底層說,hibernate偷懶了,其實只需要遍歷下某個路徑下的所有檔案,便能拿到類名; 使用sessionFactor

[Python小記] 通俗的理解閉包 閉包能我們什麼?

熱身: 首先給出閉包函式的必要條件:   閉包函式必須返回一個函式物件 閉包函式返回的那個函式必須引用外部變數(一般不能是全域性變數),而返回的那個函式內部不一定要return 幾個典型的閉包例子: # ENV>>> Python

Koa我們了什麼

整理web渲染思路,與KOA作比較 1.開啟伺服器並監聽埠,註冊監聽事件 // 原生 let http = require('http') const server = http.createServer((req, res) => { // res.setH

ARC到底我們了哪些工作?

關於ARC 從iOS5開始, 就支援自動引用計數(Automatic Reference Counting, ARC)了, 所以就變得更為簡單了。ARC幾乎把所有記憶體管理事宜都交由編譯器來決定, 開發者只需專注於業務邏輯。 關於ARC的一些看法 1.

maven能我們什麼

1.首先我們明確maven什麼?       Maven是基於專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。以上來自百度百科。我們讀著比較繞口,也很難理解真正的含義。我們現在從理解的角度看待這個問題(也就是碰到問題,解決問題

[Python小記] 通俗的理解閉包 閉包能我們什麼?

熱身: 首先給出閉包函式的必要條件: 閉包函式必須返回一個函式物件 閉包函式返回的那個函式必須引用外部變數(一般不能是全域性變數),而返回的那個函式內部不一定要return 幾個典型的閉包例子: # ENV>>> Python 3.6 #

spring框架在開發中為我們了哪些事?

開發中利用spring可以減輕程式設計師工作負擔,提高程式碼的複用率,降低程式的耦合性,簡化程式碼易於程式的擴充套件和維護。那麼spring是如何實現這些功能的呢,spring在開發中為我們做了哪些事呢? 1、spring實現了ioc 即控制反轉,將物件的建立的控制權由程式

Spring通過註解管理控制反轉(IOC)和注入(DI)

spring中的註解用法 1.註解的依賴注入di 在spring的xml中用 <property name="" ref=""> <!-- setter方式注入--> <constructor index="" ref=""/&

SpringIOC篇章具體解釋

什麽 alt cti 反轉 獲得 ring 這樣的 圖片 多態 專題一 IOC 1.接口以及面向接口編程 a.結構設計中,分清層次以及調用關系,每層僅僅向外(或者上層)提供一組功能接口,各層間僅依賴接口而非實現類這樣做的優點是,接口實現的變動不影響各層

從明天起,讓我們一名調包俠

center alt 基礎設施 深入 程序包 images 反饋 learning 這樣的 原文首發於我的微信公眾號:GeekArtT。 從明天起,做一個幸福的人,餵馬、劈柴,周遊世界,然後做一名合格的調包俠。不再基礎設施上糾結不已,而是在前人的基礎上,進行地春暖花開

為什麽要通過百科類產品網站營銷優化推廣工作

今天是2017年6月10日,細心的站長應該早已悉知,百度從本月1日起正式開始落實實名制。現在你去看一眼百度知道首頁的右上角,有一個十分顯眼的HOT,時刻提醒著用戶實名制來啦!這表明了百度加強用戶管理的決心,也增加了通過百度產品做網站營銷優化推廣工作的難度。不過,我們億豐網絡倒是認為本次調整是一次好事,因

SpringIOC/DI(反轉控制/依賴註入)_入門Demo

pro 開發 string類 業務邏輯 測試類 控制 control odin 以及 軟件152 劉安民 在平時的java應用開發中,我們要實現某一個功能或者說是完成某個業務邏輯時至少需要兩個或以上的對象來協作完成,在沒有使用Spring的時候,每個對象在需要使用他的合作對

我們不到一刀劈死它,但能夠先切斷它的一根腳趾頭

基於web 設計 方式 做人 能夠 類別 logo -m data- 最先取名“殺死Excel”,後來認為做人應該低調。就取名“面對Excel和Google docs,我們照樣創新”。 Chrome顛覆IE。 iPhone顛覆微軟Windows Mobile

spring源碼學習】springIOC容器之BeanFactoryPostProcessor接口學習

時機 process roc sta 自動 註解 lis nbsp factor 【一】org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>該接口實現方法的執行時機:該接口void

《Java從入門到放棄》入門篇:springIOC的註入姿勢

java ioc spring IOC到底是個什麽東東呢?控制反轉(Inversion of Control,英文縮寫為IoC),其實就是這個東東。你隨便百度一下就會得到比較書面的解釋:通過引入實現了IoC模式的IoC容器,即可由IoC容器來管理對象的生命周期、依賴關系等,從而使得應用程序的配置和

Spring 實踐 -IoC

有一個 cloud getprop 處理器 prop npos 屬性註入 www ioc容器 Spring 實踐

SpringIoC和DI最生動的解釋

控制 就會 卡洛斯 lec spring nec 復制 文章 朋友   這篇文章是我從別人那裏復制的,因為我怕以後會看不到了,太生動了   首先想說說IoC(Inversion of Control,控制倒轉)。這是spring的核心,貫穿始終。所謂IoC,對於spring

Spring框架—— IOC容器和Bean的配置

單引號 framework 將不 配置信息 init 字符串連接 生命 release exp 1 IOC和DI ①IOC(Inversion of Control):反轉控制。 在應用程序中的組件需要獲取資源時,傳統的方式是組件主動的從容器中獲取所需要的資源,在這樣的模

Spring框架IOC,DI概念理解

ram 方式 ins 商品 www auto 默認 use 當我 1.什麽是框架? 框架是一種重復使用的解決方案,針對某個軟件開發的問題提出的。 Spring框架,它是一個大型的包含很多重復使用的某個領域的解決方案。 Spring的理念:不要重復發明輪子。 2.S