国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

慕課網(wǎng)_《使用Google Guice實現(xiàn)依賴注入》學(xué)習(xí)總結(jié)

2450184176 / 2594人閱讀

摘要:時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)源碼學(xué)習(xí)源碼第一章課程介紹課程簡介是啥讀音是輕量級的依賴注入框架說明一個的框架需要有基礎(chǔ)什么是剝離注入輕量級代碼少易維護性能優(yōu)異,跟比較。

時間:2017年10月14日星期六
說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學(xué)源碼:https://github.com/zccodere/s...
學(xué)習(xí)源碼:https://github.com/zccodere/s...

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

Google Guice:Guice是啥

Guice讀音:juice
Guice is a lightweight dependency injection framework for java
Guice 是輕量級的依賴注入框架

Google Guice:說明

Java:一個java的框架、需要有java基礎(chǔ)
dependency injection:什么是dependency、剝離dependency、注入dependency
lightweight:輕量級(代碼少、易維護、性能優(yōu)異),跟Spring比較。
但是:學(xué)習(xí)曲線陡峭、對開發(fā)者的要求太高了

課程目標(biāo)

理解、重新理解dependency injection
掌握Guice的語法,更要掌握Guice的設(shè)計理念
開始在你的下一個項目中使用Guice

課程要點

什么是Guice
dependency injection:改造Hello World程序
注入(Injection)
綁定(Binding)
作用域或生命周期(Scope)
Guice AOP
使用Guice和SpringBoot協(xié)作搭建一個簡單的Web應(yīng)用
Guice vs Spring
1-2 產(chǎn)生原因

Spring的不足

手動配置:使用xml進行配置,配置太過龐大
自動配置:Spring提供了自動配置,復(fù)雜項目無法實現(xiàn)

Guice不同于Spring

取消xml
取消bean的概念
使用Constructor來注入
泛型支持
一個專注于Dependency Injection的框架

參考資料

https://github.com/google/guice/wiki/Motivation
https://github.com/google/guice/wiki/ExternalDocumentation
更多利用英文資料,如Stackoverflow
第二章:理解依賴 2-1 基礎(chǔ)配置

Hello Guice

配置Guice環(huán)境
Dependency Injection基礎(chǔ)
改造Hello World

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


    4.0.0

    com.myimooc
    guicedemo
    0.0.1-SNAPSHOT
    jar

    guicedemo
    http://maven.apache.org

    
        UTF-8
        1.8
        1.8
        1.8
    

    
        
            com.google.inject
            guice
            4.1.0
        
        
            com.google.inject.extensions
            guice-multibindings
            4.1.0
        
        
        
            junit
            junit
            4.12
            test
        
    

2-2 依賴分析

經(jīng)典Hello World分析

核心算法:將指定內(nèi)容輸出至指定目標(biāo)

改造Hello World程序

面向?qū)ο蠡?消除Dependency
用Guice來配置Dependency
2-3 面向?qū)ο?/b>

代碼編寫

1.編寫MyApplet類

package com.myimooc.guicedemo;

/**
 * @title Applet類
 * @describe 提供run()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public interface MyApplet extends Runnable{
    
}

2.編寫HelloWorldPrinter類

package com.myimooc.guicedemo.helloworlddemo;

import com.myimooc.guicedemo.MyApplet;

/**
 * @title HelloWorldPrinter類
 * @describe 提供打印HelloWorld的功能
 * @author zc
 * @version 1.0 2017-10-15
 */
public class HelloWorldPrinter implements MyApplet {
    
    private void printHelloWorld() {
        System.out.println("Hello World!");
    }
    
    @Override
    public void run() {
        printHelloWorld();
    }
}

3.編寫Configuration類

package com.myimooc.guicedemo;

import com.myimooc.guicedemo.helloworlddemo.HelloWorldPrinter;

/**
 * @title Configuration類
 * @describe 程序啟動配置類
 * @author zc
 * @version 1.0 2017-10-15
 */
public class Configuration {
    
    public static MyApplet getMainApplet() {
        return new HelloWorldPrinter();
    }
    
}

4.編寫App類

package com.myimooc.guicedemo;

/**
 * @title 啟動類
 * @describe 改造HelloWorld類
 * @author zc
 * @version 1.0 2017-10-15
 */
public class App {
    /**
     * main方法的作用
     * bootstrap:
     *   parse command line:解析命令行參數(shù)
     *   set up environment:配置環(huán)境參數(shù)
     *   kick off main logic:啟動程序邏輯
     * @param args
     */
    public static void main(String[] args) {
        MyApplet mainApplet = Configuration.getMainApplet();
        mainApplet.run();
    }
}

面向?qū)ο蠡〗Y(jié)

善于運用IDE提供的重構(gòu)能力
    Ctrl + 1:猜測下一步動作
    Ctrl + shift + r:重命名
    先寫代碼,再讓其編譯通過
    先思考確定需要什么,然后再機械性勞動實現(xiàn)
函數(shù)命名
    從實現(xiàn)角度:精確描述函數(shù)干什么
    從調(diào)用者角度:描述調(diào)用者需求
    兩者不匹配:需要進行抽象的點
2-4 提取依賴

代碼編寫

1.編寫MyApplet類

package com.myimooc.guicedemo.noguice;

/**
 * @title MyApplet類
 * @describe 提供run()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public interface MyApplet extends Runnable{
    
}

2.編寫StringWritingApplet類

package com.myimooc.guicedemo.noguice.helloworlddemo;

import com.myimooc.guicedemo.noguice.MyApplet;

/**
 * @title HelloWorldPrinter類
 * @describe 提供打印HelloWorld的功能
 * @author zc
 * @version 1.0 2017-10-15
 */
public class StringWritingApplet implements MyApplet {
    
    private MyDestination destination;
    private StringProvider stringProvider;
    
    public StringWritingApplet(MyDestination destination,StringProvider stringProvider) {
        super();
        this.destination = destination;
        this.stringProvider = stringProvider;
    }

    private void writeString() {
        destination.write(stringProvider.get());
    }
    
    @Override
    public void run() {
        writeString();
    }
}

3.編寫StringProvider類

package com.myimooc.guicedemo.noguice.helloworlddemo;

/**
 * @title StringProvider類
 * @describe 提供get()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public interface StringProvider {

    String get();

}

4.編寫MyDestination類

package com.myimooc.guicedemo.noguice.helloworlddemo;

/**
 * @title MyDestination類
 * @describe 提供write()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public interface MyDestination {

    void write(String string);

}

5.編寫PrintStreamWriter類

package com.myimooc.guicedemo.noguice.helloworlddemo;

import java.io.PrintStream;

/**
 * @title PrintStreamWriter類
 * @describe 實現(xiàn)write()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public class PrintStreamWriter implements MyDestination {

    private PrintStream destination;
    
    public PrintStreamWriter(PrintStream destination) {
        super();
        this.destination = destination;
    }

    @Override
    public void write(String string) {
        destination = System.out;
        destination.println(string);
    }
}

6.編寫Configuration類

package com.myimooc.guicedemo.noguice;

import com.myimooc.guicedemo.noguice.helloworlddemo.PrintStreamWriter;
import com.myimooc.guicedemo.noguice.helloworlddemo.StringProvider;
import com.myimooc.guicedemo.noguice.helloworlddemo.StringWritingApplet;

/**
 * @title Configuration類
 * @describe 程序啟動配置類
 * @author zc
 * @version 1.0 2017-10-15
 */
public class Configuration {
    
    public static MyApplet getMainApplet() {
        return new StringWritingApplet(
               new PrintStreamWriter(System.out),
               new StringProvider() {
                    @Override
                    public String get() {
                        return "Hello World";
                    }
                });
    }
}

7.編寫App類

package com.myimooc.guicedemo.noguice;

/**
 * @title 啟動類
 * @describe 改造HelloWorld類
 * @author zc
 * @version 1.0 2017-10-15
 */
public class App {
    /**
     * main方法的作用
     * bootstrap:
     *   parse command line:解析命令行參數(shù)
     *   set up environment:配置環(huán)境參數(shù)
     *   kick off main logic:啟動程序邏輯
     * @param args
     */
    public static void main(String[] args) {
        MyApplet mainApplet = Configuration.getMainApplet();
        mainApplet.run();
    }
}

消除Dependency小結(jié)

2-5 配置依賴

代碼編寫

1.編寫MyApplet類

package com.myimooc.guicedemo.useguice;

/**
 * @title MyApplet類
 * @describe 提供run()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public interface MyApplet extends Runnable{
    
}

2.編寫StringWritingApplet類

package com.myimooc.guicedemo.useguice.helloworlddemo;

import com.google.inject.Inject;
import com.google.inject.Provider;
import com.myimooc.guicedemo.useguice.MyApplet;

/**
 * @title HelloWorldPrinter類
 * @describe 提供打印HelloWorld的功能
 * @author zc
 * @version 1.0 2017-10-15
 */
public class StringWritingApplet implements MyApplet {
    
    private MyDestination destination;
    private Provider stringProvider;
    
    @Inject
    public StringWritingApplet(MyDestination destination,@Output Provider stringProvider) {
        super();
        this.destination = destination;
        this.stringProvider = stringProvider;
    }

    private void writeString() {
        destination.write(stringProvider.get());
    }
    
    @Override
    public void run() {
        writeString();
    }
}

3.編寫MyDestination類

package com.myimooc.guicedemo.useguice.helloworlddemo;

/**
 * @title MyDestination類
 * @describe 提供write()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public interface MyDestination {

    void write(String string);

}

4.編寫PrintStreamWriter類

package com.myimooc.guicedemo.useguice.helloworlddemo;

import java.io.PrintStream;

import javax.inject.Inject;

/**
 * @title PrintStreamWriter類
 * @describe 實現(xiàn)write()方法
 * @author zc
 * @version 1.0 2017-10-15
 */
public class PrintStreamWriter implements MyDestination {

    private PrintStream destination;
    
    @Inject
    public PrintStreamWriter(PrintStream destination) {
        super();
        this.destination = destination;
    }

    @Override
    public void write(String string) {
        destination = System.out;
        destination.println(string);
    }
}

5.編寫Output類

package com.myimooc.guicedemo.useguice.helloworlddemo;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import com.google.inject.BindingAnnotation;

/**
 * @title Output注解
 * @describe 
 * @author zc
 * @version 1.0 2017-10-15
 */
@Retention(RetentionPolicy.RUNTIME)
@BindingAnnotation
public @interface Output {

}

6.編寫HelloWorldModule類

package com.myimooc.guicedemo.useguice.helloworlddemo;

import java.io.PrintStream;

import com.google.inject.AbstractModule;
import com.myimooc.guicedemo.useguice.MyApplet;

/**
 * @title HelloWorldModule類
 * @describe HelloWorld模塊的依賴配置
 * @author zc
 * @version 1.0 2017-10-15
 */
public class HelloWorldModule extends AbstractModule{
    
    @Override
    protected void configure() {
        bind(MyApplet.class).to(StringWritingApplet.class);
        bind(MyDestination.class).to(PrintStreamWriter.class);
        bind(PrintStream.class).toInstance(System.out);
        bind(String.class).annotatedWith(Output.class).toInstance("Hello World");
    }
}

7.編寫MainModule類

package com.myimooc.guicedemo.useguice;

import com.google.inject.AbstractModule;
import com.myimooc.guicedemo.useguice.helloworlddemo.HelloWorldModule;

/**
 * @title MainModule類
 * @describe Guice用來配置的類
 * @author zc
 * @version 1.0 2017-10-15
 */
public class MainModule extends AbstractModule{

    @Override
    protected void configure() {
        install(new HelloWorldModule());
    }
}

8.編寫App類

package com.myimooc.guicedemo.useguice;

import com.google.inject.Guice;

/**
 * @title 啟動類
 * @describe 改造HelloWorld類
 * @author zc
 * @version 1.0 2017-10-15
 */
public class App {
    /**
     * main方法的作用
     * bootstrap:
     *   parse command line:解析命令行參數(shù)
     *   set up environment:配置環(huán)境參數(shù)
     *   kick off main logic:啟動程序邏輯
     * @param args
     */
    public static void main(String[] args) {
        MyApplet mainApplet = Guice
                .createInjector(new MainModule())
                .getInstance(MyApplet.class);
        mainApplet.run();
    }
}

Guice配置Dependency小結(jié)

第三章:注入依賴 3-1 基本注入

注入圖解

注入(Injection)

構(gòu)造函數(shù)注入
    使用final來區(qū)分dependency和狀態(tài)
    注入時不考慮如何實現(xiàn)或綁定
成員變量注入
    用于測試
    使用injectMembers來注入測試用例

代碼編寫

1.編寫OrderService類

2.編寫PaymentService類

3.編寫PriceService類

4.編寫OrderServiceImpl類

5.編寫PaymentServiceImpl類

6.編寫PriceServiceImpl類

7.編寫SessionManager類

8.編寫ServerModule類

9.編寫OrderServiceTest類

受篇幅限制,源碼請到我的github地址查看

3-2 其他注入

注入Provider

如何注入Provider

DatabaseConnection dbConn
Provider< DatabaseConnection > dbConnProvider
Guice會考慮對象生命周期
需要時可以自己實現(xiàn)Provider

命名注入

@Inject @Named(“dbSpec”) private String dbSpec;
@Inject @LogFileName private String logFileName;
使用@Named:參數(shù)來自配置文件或命令行、或者為了開發(fā)方便
使用屬性:通常采用此方法

代碼編寫

1.修改SessionManager類

package com.myimooc.guicedemo.server.impl;

import javax.inject.Inject;

import com.google.inject.Provider;

/**
 * @title session管理類
 * @describe 模擬訂單系統(tǒng)
 * @author zc
 * @version 1.0 2017-10-15
 */
public class SessionManager {
    
    private final Provider sessionIdProvider;
    
    @Inject
    public SessionManager(@SessionId Provider sessionIdProvider) {
        super();
        this.sessionIdProvider = sessionIdProvider;
    }

    public Long getSessionId() {
        return sessionIdProvider.get();
    }

}

2.修改ServerModule類

package com.myimooc.guicedemo.server.impl;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.myimooc.guicedemo.server.OrderService;
import com.myimooc.guicedemo.server.PaymentService;
import com.myimooc.guicedemo.server.PriceService;

/**
 * @title ServerModule類
 * @describe 綁定依賴
 * @author zc
 * @version 1.0 2017-10-15
 */
public class ServerModule extends AbstractModule{

    @Override
    protected void configure() {
        bind(OrderService.class).to(OrderServiceImpl.class);
        bind(PaymentService.class).to(PaymentServiceImpl.class);
        bind(PriceService.class).to(PriceServiceImpl.class);
    }
    
    @Provides 
    @SessionId
    Long generateSessionId(){
        return System.currentTimeMillis();
    }
}

3.編寫SessionId類

package com.myimooc.guicedemo.server.impl;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import com.google.inject.BindingAnnotation;

/**
 * @title SessionId注解
 * @describe 用來綁定數(shù)據(jù)
 * @author zc
 * @version 1.0 2017-10-15
 */
@Retention(RetentionPolicy.RUNTIME)
@BindingAnnotation
public @interface SessionId {

}

4.編寫SessionManagerTest類

package com.myimooc.guicedemo.server.impl;

import static org.junit.Assert.assertNotEquals;

import javax.inject.Inject;

import org.junit.Before;
import org.junit.Test;

import com.google.inject.Guice;

/**
 * @title 測試類
 * @describe 測試@Provides
 * @author zc
 * @version 1.0 2017-10-15
 */
public class SessionManagerTest {
    
    @Inject
    SessionManager sessionManager;
    
    @Before
    public void setUp(){
        Guice.createInjector(new ServerModule())
             .injectMembers(this);
    }
    
    @Test
    public void testGetSessionId() throws InterruptedException{
        Long sessionId1 = sessionManager.getSessionId();
        Thread.sleep(1000);
        Long sessionId2 = sessionManager.getSessionId();
        assertNotEquals(sessionId1.longValue(), sessionId2.longValue());
    }
    
}
第四章:綁定依賴 4-1 綁定詳解

綁定圖解

綁定

類名綁定
實例綁定
連接綁定
Provider綁定
命名綁定
泛型綁定
集合綁定
4-2 模塊組織

Module的相互關(guān)系

并列:Guice.createInjector(module1,module2,…)
嵌套:install(module)
覆蓋:Modules.override(module1).with(module2)

Module何時被運行

Module里存放了很多表達式
Module不被“運行”
Guice.createInjector()時記錄所有表達式

系統(tǒng)何時初始化

沒有“初始化”概念,沒有Spring的Configuration Time
injector.getInstance()時根據(jù)表達式調(diào)用構(gòu)造函數(shù)
4-3 綁定示例

案例:HelloWorld與命令行

讓HelloWorld打印命令行參數(shù)
讓HelloWorld通過命令行決定啟動哪個Applet

代碼編寫

1.編寫MyApplet類

2.編寫Applets類

3.編寫StringWritingApplet類

4.編寫PrintLineApplet類

5.編寫MyDestination類

6.編寫PrintStreamWriter類

7.編寫Output類

8.編寫Args類

9.編寫HelloWorldModule類

10.編寫PrintLineModule類

11.編寫CommandLineModule類

12.編寫MainModule類

13.編寫App類

受篇幅限制,源碼請到我的github地址查看

第五章:生命周期 5-1 基本介紹

生命周期或作用域

選擇作用域

默認:適用于:一般實例,stateless,構(gòu)造速度快
如:Parser、PriceCalulator
Singleton:適用于:stateful的實例,構(gòu)造速度慢的實例,必須線程安全
如:數(shù)據(jù)庫、網(wǎng)絡(luò)連接
Session/Request:含有session/request信息的實例、stateful的實例
如:SessionSate
5-2 使用介紹

作用域的使用

作為類或者@Provides方法的屬性
在綁定時使用In語句
@Singleton的線程安全性
第六章:切面編程 6-1 面向切面

Guice AOP

符合AOP Alliance的MethodInterceptor接口
MethodInterceptor可用于“Aspects”
    獲取函數(shù)調(diào)用類、方法、參數(shù)
    控制是否執(zhí)行函數(shù)調(diào)用

實現(xiàn)AOP

綁定MethodInterceptor
實現(xiàn)MethodInterceptor
在MethodInterceptor中注入Dependency

代碼編寫

1.編寫Logged類

package com.myimooc.guicedemo.aop;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * @title Logged注解
 * @describe 用于標(biāo)識需要記錄日志的方法
 * @author zc
 * @version 1.0 2017-10-15
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface Logged {
    
}

2.編寫LoggedInterceptor類

package com.myimooc.guicedemo.aop;

import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import com.google.common.base.Joiner;

/**
 * @title LoggedMethodInterceptor類
 * @describe 切面類,用于處理被攔截的方法,實現(xiàn)日志記錄
 * @author zc
 * @version 1.0 2017-10-15
 */
public class LoggedInterceptor implements MethodInterceptor{

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        
        // 獲得調(diào)用參數(shù)
        invocation.getArguments();
        // 獲得調(diào)用對象
        invocation.getClass();
        // 獲得調(diào)用方法
        Method method = invocation.getMethod();
        
        // 記錄日志
        System.out.println(String.format("Calling %s#%s(%s)",
            method.getDeclaringClass().getName(),
            method.getName(),
            Joiner.on(",").join(invocation.getArguments())));
        
        // 執(zhí)行調(diào)用方法
        Object result = invocation.proceed();
        
        // 返回調(diào)用結(jié)果
        return result;
    }
}

3.編寫LoggedModule類

package com.myimooc.guicedemo.aop;

import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;

/**
 * @title LoggedModule類
 * @describe 用于配置依賴綁定
 * @author zc
 * @version 1.0 2017-10-15
 */
public class LoggedModule extends AbstractModule{

    @Override
    protected void configure() {
        
        // 配置攔截任意類,帶有@Logged注解修飾的方法
        bindInterceptor(
            Matchers.any(), 
            Matchers.annotatedWith(Logged.class), 
            new LoggedInterceptor());
        
    }
}
第七章:框架集成 7-1 協(xié)作框架

使用Guice與SpringBoot協(xié)作搭建Web應(yīng)用

使用SpringBoot搭建簡單的Web應(yīng)用
使用Guice搭建業(yè)務(wù)邏輯

協(xié)作框架

7-2 案例實戰(zhàn)

創(chuàng)建名為guicespring的maven工程

完成后的項目結(jié)構(gòu)如下

受篇幅限制,源碼請到我的github地址查看

協(xié)作小結(jié)

SpringBoot進行總控
各自綁定Guice Injector和Spring ApplicationContext
注意對象生命周期
第八章:課程總結(jié) 8-1 適用場景

Guice與Spring

Guice不是Spring的重制版
Spring綁定
    配置文件體現(xiàn)完整裝配結(jié)構(gòu)
    大量使用字符串:實例名:屬性名
    在Config Time完成組裝
Guice綁定
    Java代碼描述綁定規(guī)則
    每個注入和綁定僅描述局部依賴
    沒有Config Time

Guice的優(yōu)點

代碼量少
性能優(yōu)異
支持泛型
Constructor綁定:Immutable objects,不再需要getter/setter
強類型
易于重構(gòu)

Guice的缺點

Module和綁定規(guī)則不易理解
文檔教程少,社區(qū)資源少
無法方便搭出特殊結(jié)構(gòu):如循環(huán)依賴
Guice僅僅是依賴注入框架,而Spring涵蓋較多

從Spring遷移到Guice

不建議
Spring與Guice整合

新項目需要選擇Dependency Injection方案

不妨嘗試Guice
與其它組件或解決方案整合:注意對象生命周期
8-2 課程回顧

課程回顧

什么是Guce
Dependency Injection:改造Hello World程序
注入(Injection)
綁定(Binding)
作用域或生命周期(Scope)
Guice AOP
使用Guice與SpringBoot協(xié)作搭建Web應(yīng)用

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67793.html

相關(guān)文章

  • 課網(wǎng)_《Spring入門篇》學(xué)習(xí)總結(jié)

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

    Ververica 評論0 收藏0
  • 課網(wǎng)_《SpringMVC攔截器》學(xué)習(xí)總結(jié)

    摘要:攔截器學(xué)習(xí)總結(jié)時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼暫無。攔截器不依賴與容器,過濾器依賴與容器。攔截器只能對請求起作用,而過濾器則可以對幾乎所有的請求起作用。共性問題在攔截器中處理,可以減少重復(fù)代碼,便于維護。 《SpringMVC攔截器》學(xué)習(xí)總結(jié) 時間:2017年2月18日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...

    calx 評論0 收藏0
  • 課網(wǎng)_《Java實現(xiàn)Base64加密》學(xué)習(xí)總結(jié)

    摘要:時間年月日星期一說明本文部分內(nèi)容均來自慕課網(wǎng)。多用于網(wǎng)絡(luò)加密。散列函數(shù)函數(shù)或消息摘要函數(shù)主要作用散列函數(shù)用來驗證數(shù)據(jù)的完整性。 時間:2017年4月10日星期一說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個人學(xué)習(xí)源碼:https://github.com/zccodere...

    verano 評論0 收藏0
  • 課網(wǎng)_《模式的秘密之工廠模式》學(xué)習(xí)總結(jié)

    摘要:時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。這對所有形態(tài)的工廠模式都是重要的這個系統(tǒng)的產(chǎn)品有至少一個的產(chǎn)品族同屬于一個產(chǎn)品族的產(chǎn)品是設(shè)計成在一起使用的。 時間:2017年08月27日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.c...

    jsyzchen 評論0 收藏0
  • 課網(wǎng)_《JSON快速入門(Java版)》學(xué)習(xí)總結(jié)

    摘要:時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼無個人學(xué)習(xí)源碼第一章課程概述課程介紹課程須知本課程面向所有使用語言進行開發(fā)的小伙伴。 時間:2017年05月21日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程概述 1-1 ...

    shiina 評論0 收藏0

發(fā)表評論

0條評論

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