成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

慕課網_《RxJava與RxAndroid基礎入門》學習總結

劉明 / 763人閱讀

時間:2017年10月16日星期一
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學源碼:無
學習源碼:https://github.com/zccodere/s...

第一章:課程簡介 1-1 課程介紹

本門課程的主要內容

RxJava是什么
RxAndroid是什么
RxJava常用操作符(重點、難點)
怎樣在項目中使用RxJava和RxAndroid

如何學習RxJava與RxAndroid

總體總體章節(jié),有初步了解
跟著講解自己動手實際去敲代碼
GitHub上RxJava項目Wiki文檔
看RxJava相關博客和優(yōu)秀文章

為什么學RxJava與RxAndroid

RxJava能提高工作效率
RxJava能優(yōu)雅解決復雜業(yè)務場景
RxJava使用越來越流行
RxJava的優(yōu)秀特性

本門課程能夠學到什么

了解什么是響應式編程
了解RxJava和RxAndroid到底是什么
了解RxJava歷史來源
清除RxJava與RxAndroid關系
學會在項目中使用RxJava和RxAndroid

相關資源

RxJava英文文檔:https://github.com/ReactiveX/RxJava/wiki
RxJava中文文檔:https://mcxiaoke.gitbooks.io/rxdocs/content/
RxJava經典資料:https://github.com/lzyzsd/Awesome-RxJava
1-2 響應式編程

什么是響應式編程

定義:是一種基于異步數據流概念的編程模式
關鍵概念:事件
使用場景:UI(通用)
第二章:基本概述 2-1 RxJava概述

RxJava是什么

異步數據處理庫
擴展的觀察者模式

RxJava歷史來源

Netflix公司遇到問題
目標:重構當前架構來減少REST調用的次數
嘗試:微軟RX遷移到JVM

RxJava特點

jar包小于1MB
輕量級框架
支持Java8 lambda
支持Java6及Android 2.3以上
支持異步和同步

擴展的觀察者模式

onCompleted()事件:通知完畢事件
onError()事件:通知異常事件
使用組合而不是嵌套,避免陷入回調地獄
2-2 RxAndroid概述

RxAndroid是什么

是RxJava針對Android平臺的一個擴展,用于Android開發(fā)
提供響應式擴展組件快速、易于開發(fā)Android應用程序

Schedulers(調度器)

解決Android主線程問題:針對Android
解決多線程問題

Schedulers示例

2-3 RxJava擴展

觀察者模式四大要素

Observable被觀察者
Observer觀察者
Subscribe訂閱
事件

觀察者模式圖示

RxJava擴展的觀察者模式圖示

第三章:使用詳解 3-1 入門案例

創(chuàng)建名為myrxjava的maven工程pom如下


  4.0.0

  com.myimooc
  myrxjava
  0.0.1-SNAPSHOT
  jar

  myrxjava
  http://maven.apache.org

    
        UTF-8
        1.8
        1.8
        1.8
    

  
    
        io.reactivex
        rxjava
        1.3.2
    
    
      junit
      junit
      4.12
      test
    
  

1.編寫HelloWorld類

package com.myimooc.myrxjava;

import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Subscriber;

/**
 * @title HelloWorld類
 * @describe 3-1 入門案例HelloWorld
 * @author zc
 * @version 1.0 2017-10-16
 */
public class HelloWorld 
{
    @SuppressWarnings({ "deprecation", "rawtypes", "unchecked" })
    public static void main( String[] args )
    {
        
        // 1.創(chuàng)建被觀察者
        Observable myObservable = Observable.create(new OnSubscribe(){
            @Override
            public void call(Subscriber subscriber) {
                subscriber.onNext("hello World!");
                throw new NullPointerException("出錯啦");
            }
        });
        
        // 2.創(chuàng)建觀察者
        Subscriber mySubscriber = new Subscriber(){
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(String str) {
                System.out.println("onNext() " + str);
            }
        };
        
        // 3.訂閱事件
        myObservable.subscribe(mySubscriber);
    }
}
3-2 創(chuàng)建操作

操作符的分類

Creating Observables(創(chuàng)建Observable:創(chuàng)建操作)
Transforming Observables(轉換Observable:轉換操作)
Filtering Observables(過濾Observable:過濾操作)
Combining Observables(組合Observable:組合操作)
Error Handling Operators(處理錯誤)

Creating Observables(創(chuàng)建Observable)

Create
Just
From
Defer
Empty/Never/Throw
Interval
Range
Repeat
Start
Timer

代碼編寫

1.編寫CreatingObservables類

package com.myimooc.myrxjava;

import java.util.ArrayList;
import java.util.List;

import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.functions.Func0;
import rx.Subscriber;

/**
 * @title 創(chuàng)建操作符
 * @describe 創(chuàng)建操作符演示
 * @author zc
 * @version 1.0 2017-10-16
 */
@SuppressWarnings("unused")
public class CreatingObservables {
    
    public static void main(String[] args) {
//        create();
//        just();
//        from();
//        defer();
        repeat();
    }
    
    /**
     * repeat操作符
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static void repeat() {
        Observable observable= Observable.range(1,5).repeat(2);
        observable.subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }
    
    /**
     * range操作符
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static void range() {
        Observable observable= Observable.range(1,5);
        observable.subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    private static String deferStr = "default";
    /**
     * defer操作符
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static void defer() {
        Observable observable= Observable.defer(new Func0>() {
            @Override
            public Observable call() {
                return Observable.just(deferStr);
            }
        });
        deferStr = "RxJava";
        observable.subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(String str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * from操作符
     */
    private static void from() {
        List nums = new ArrayList();
        nums.add(1);
        nums.add(2);
        nums.add(3);
        nums.add(4);
        nums.add(5);
        Observable.from(nums).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * just操作符
     */
    private static void just() {
        Observable.just("RxJava").subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(String str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Create操作符
     */
    private static void create() {
        Observable.unsafeCreate(new OnSubscribe(){
            @Override
            public void call(Subscriber subscriber) {
                subscriber.onNext("RxJava");
            }
        }).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(String str) {
                System.out.println("onNext(): " + str);
            }
        });
    }
}
3-3 轉換操作

Transforming Observables(轉換Observable)

Map
FlatMap
GroupBy
Buffer
Scan
Window

代碼編寫

1.編寫TransformingObservables類

package com.myimooc.myrxjava;

import java.util.List;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.functions.Func1;
import rx.functions.Func2;
import rx.observables.GroupedObservable;

/**
 * @title 轉換操作符
 * @describe 轉換操作符演示
 * @author zc
 * @version 1.0 2017-10-16
 */
@SuppressWarnings("unused")
public class TransformingObservables {
    
    public static void main(String[] args) {
//        transformMap();
//        transformFlatMap();
//        transformGroupBy();
//        transformBuffer();
        transformScan();
    }

    /**
     * Scan操作符:對數據進行累加
     */
    private static void transformScan() {
        Observable.range(1,5).scan(new Func2() {
            
            @Override
            public Integer call(Integer sum, Integer num) {
                return sum + num;
            }
            
        }).subscribe(new Observer() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Buffer操作符:分批讀取數據
     */
    private static void transformBuffer() {
        Observable.range(1,5).buffer(2).subscribe(new Observer>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(List str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * GroupBy操作符:對數據進行分組操作
     */
    private static void transformGroupBy() {
        Observable.just(1,2,3,4,5).groupBy(new Func1(){

            @Override
            public Integer call(Integer data) {
                return data % 2;
            }
            
        }).subscribe(new Observer>() {
            @Override
            public void onCompleted() {
            }
            @Override
            public void onError(Throwable arg0) {
            }
            @Override
            public void onNext(final GroupedObservable groupedObservable) {
                groupedObservable.subscribe(new Subscriber() {

                    @Override
                    public void onCompleted() {
                    }
                    @Override
                    public void onError(Throwable arg0) {
                    }
                    @Override
                    public void onNext(Integer data) {
                        System.out.println("group:" + groupedObservable.getKey() + " data:" + data);
                    }
                });
            }
        });
    }

    /**
     * FlatMap操作符:一個對象轉換為多個對象
     */
    private static void transformFlatMap() {
        
        Observable.just(1,2,3,4,5).flatMap(new Func1>(){

            @Override
            public Observable call(Integer num) {
                return Observable.just(String.valueOf(num));
            }
            
        }).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(String str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Map操作符:一個對象轉換為另一個對象
     */
    private static void transformMap() {
        
        Observable.just(123).map(new Func1(){

            @Override
            public String call(Integer num) {
                return String.valueOf(num);
            }
            
        }).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(String str) {
                System.out.println("onNext(): " + str);
            }
        });
    }
    
    
}
3-4 過濾操作

Filtering Observables(過濾Observable)

Debounce
Distinct
ElementAt
Filter
First
IgnoreElements
Last
Sample
Skip
SkipLast
Take
TakeLast

代碼編寫

1.編寫FilteringObservables類

package com.myimooc.myrxjava;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Observer;
import rx.Subscriber;
import rx.functions.Func1;
import rx.functions.Func2;

/**
 * @title 過濾操作符
 * @describe 過濾操作符演示
 * @author zc
 * @version 1.0 2017-10-17
 */
@SuppressWarnings("unused")
public class FilteringObservables {
    
    public static void main(String[] args) {
//        filterDebounce();
//        filterDistinct();
//        filterElementAt();
//        filterFilter();
//        filterIgnoreElements();
//        filterLast();
//        filterSample();
//        filterSkip();
        filterTake();
    }

    /**
     * Take操作符:取對應數據項
     */
    private static void filterTake() {
        Observable.just(1,2,3,4).takeLast(2).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Skip操作符:跳過數據項
     */
    private static void filterSkip() {
        Observable.just(1,2,3,4).skipLast(2).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Sample操作符:取樣
     */
    private static void filterSample() {
        Observable.unsafeCreate(new OnSubscribe(){
            @Override
            public void call(Subscriber arg) {
                try{
                    for (int i=0;i<10;i++){
                        Thread.sleep(1000);
                        arg.onNext(i);
                    }
                    arg.onCompleted();
                }catch (Exception e) {
                    arg.onError(e);
                }
            }
        }).sample(4, TimeUnit.SECONDS).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()" + arg0.getMessage());
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Last操作符:取數據項最后一個數據
     */
    private static void filterLast() {
        Observable.just(1,2,3,2,3).last().subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * IgnoreElements操作符:忽略掉指定元素,直接回調onCompleted或onError方法
     */
    private static void filterIgnoreElements() {
        Observable.unsafeCreate(new OnSubscribe() {
            @Override
            public void call(Subscriber arg) {
                arg.onNext(123);
                arg.onCompleted();
//                throw new NullPointerException();
            }
        }).ignoreElements().subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()" + arg0.getMessage());
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Filter操作符:過濾
     */
    private static void filterFilter() {
        Observable.just(1,2,3,2,3).distinct().filter(new Func1() {
            @Override
            public Boolean call(Integer arg) {
                return arg > 1;
            }
        }).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * ElementAt操作符:取出指定位置的元素
     */
    private static void filterElementAt() {
        Observable.just(1,2,3,2,3).elementAt(3).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Distinct操作符:去重操作符
     */
    private static void filterDistinct() {
        Observable.just(1,2,3,2,3).distinct().subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * Debounce操作符:在操作后指定時間內無操作時響應
     */
    private static void filterDebounce() {
        Observable.unsafeCreate(new OnSubscribe(){
            @Override
            public void call(Subscriber arg) {
                try{
                    for (int i=0;i<10;i++){
                        Thread.sleep(2000);
                        arg.onNext(i);
                    }
                    arg.onCompleted();
                }catch (Exception e) {
                    arg.onError(e);
                }
            }
        }).debounce(1,TimeUnit.SECONDS).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }
    
    

}
3-5 組合操作

Combining Observables(組合Observable)

Zip
Merge
StartWith
CombineLatest
Join
SwitchOnNext

代碼編寫

1.編寫CombiningObservables類

package com.myimooc.myrxjava;

import rx.Observable;
import rx.Subscriber;
import rx.functions.Func2;

/**
 * @title 組合操作符
 * @describe 組合操作符演示
 * @author zc
 * @version 1.0 2017-10-17
 */
@SuppressWarnings("unused")
public class CombiningObservables {
    
    public static void main(String[] args) {
//        combiningZip();
//        combiningMerge();
//        combiningStartWith();
        combiningCombineLatest();
    }
    
    /**
     * 用于將兩個Observable最近傳遞的數據通過Func2函數的規(guī)則進行組合
     */
    @SuppressWarnings("static-access")
    private static void combiningCombineLatest() {
        Observable first = Observable.just(1,3,5);
        Observable second = Observable.just(2,4,6);
        
        first.combineLatest(first,second,new Func2(){
            @Override
            public Integer call(Integer num1, Integer num2) {
                System.out.println("num1 = "+num1 + " num2 = "+num2);
                return num1 + num2;
            }
        }).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * 用于在源Observable傳遞的數據前增加數據
     * 使用startWith(Iterable),還可以在源Observable傳遞的數據前增加Iterable
     */
    private static void combiningStartWith() {
        Observable first = Observable.just(1,3,5);
        Observable second = Observable.just(2,4,6);
        
        first.startWith(second).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * 將兩個Observable通知的事件序列合并成一個事件序列,就行是一個Observable通知的一樣
     * 可以簡單的將它理解為兩個Observable合并成了一個Observable
     */
    private static void combiningMerge() {
        Observable observable1 = Observable.just(1,3,5);
        Observable observable2 = Observable.just(2,4,6);
        
        Observable.merge(observable1,observable2).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
    }

    /**
     * 用來合并兩個Observable傳遞的數據項,根據Func2函數生成一個新的值并傳遞出去
     * 當其中一個Observable傳遞數據結束或者出現(xiàn)異常后,另一個Observable也將停止傳遞數據
     */
    private static void combiningZip() {
        Observable observable1 = Observable.just(10,20,30);
        Observable observable2 = Observable.just(4,8,12,16);
        
        Observable.zip(observable1,observable2, new Func2(){
            @Override
            public Integer call(Integer integer1, Integer integer2) {
                return integer1 + integer2;
            }
        }).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }
            @Override
            public void onError(Throwable arg0) {
                System.out.println("onError()");
            }
            @Override
            public void onNext(Integer str) {
                System.out.println("onNext(): " + str);
            }
        });
        
    }

    
    
}
3-6 處理錯誤

Error Handling Operators(處理錯誤)

Catch
Retry
第四章:線程控制 4-1 Java調度器

Schedulers(調度器)

調度器(Schedulers)是RxJava以一種及其簡單的方式來解決多線程問題機制

Schedulers(調度器)種類

io()
    IO相關的操作
    這個調度器用于IO操作
computation()
    進行計算的操作
    這個是計算工作默認的調度器,與IO操作無關
    例如:buffer()、debounce()、delay()、interval()、sample()、skip()
immediate()
    立即執(zhí)行的操作
    這個調度器允許你立即在當前線程執(zhí)行你指定的工作
    例如:timeout()、timeInterval()、timestamp()
newThread()
    創(chuàng)建一個新的線程
    它為指定任務啟動一個新的線程
trampoline()
    按照順序進行處理
    調度器會按序處理隊列,并運行隊列中每一個任務
    例如:repeat()、retry()
4-2 Android調度器

AndroidSchedulers

AndroidSchedulers是RxAndroid庫提供在安卓平臺的調度器(指定觀察者在主線程)

代碼示例

4-3 非阻塞IO操作

非阻塞IO操作:圖片保存

阻塞與非阻塞IO操作比較

4-4 指定線程

SubscribeOn

RxJava提供了subscribeOn()方法來用于每個Observable對象

ObserveOn

RxJava提供了observeOn()方法來用于每個Subscriber(Observer)對象

網絡請求實例

第五章:課程總結 5-1 課程總結

課程總結

理解響應式編程
清楚RxJava和RxAndroid是什么
了解RxJava各種操作符
了解RxJava擴展的觀察者模式與一般觀察者模式的區(qū)別
了解RxJava線程調度器(Schedulers)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/67787.html

相關文章

  • 課網_《Spring入門篇》學習總結

    摘要:入門篇學習總結時間年月日星期三說明本文部分內容均來自慕課網。主要的功能是日志記錄,性能統(tǒng)計,安全控制,事務處理,異常處理等等。 《Spring入門篇》學習總結 時間:2017年1月18日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://git...

    Ververica 評論0 收藏0
  • 課網_《Netty入門之WebSocket初體驗》學習總結

    時間:2018年04月11日星期三 說明:本文部分內容均來自慕課網。@慕課網:https://www.imooc.com 教學源碼:https://github.com/zccodere/s... 學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 什么是Netty 高性能、事件驅動、異步非阻塞的IO Java開源框架 基于NIO的客戶...

    Noodles 評論0 收藏0
  • 課網_《SpringMVC數據綁定入門學習總結

    摘要:數據綁定入門學習總結時間年月日星期日說明本文部分內容均來自慕課網。慕課網教學示例源碼個人學習源碼第一章課程介紹數據綁定入門概述數據綁定概念來自百度百科簡單綁定是將一個用戶界面元素控件的屬性綁定到一個類型對象實例上的某個屬性的方法。 《SpringMVC數據綁定入門》學習總結 時間:2017年2月19日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.co...

    Karrdy 評論0 收藏0

發(fā)表評論

0條評論

劉明

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<