01 SpringとSprigMVCの回顧

19347 ワード

記事の目次
  • クライテリア
  • Springコア
  • Springフレーム設計原則
  • 制御反転と依存注入
  • 名詞解釈
  • コア注釈
  • 接面プログラミング
  • SpEL表現
  • ビーンのライフサイクル
  • 非同期方法
  • タイミングタスク
  • 小結
  • SpringMVCコア
  • MVCモード思想
  • @Controller Advice
  • ファイルアップロード
  • Http Message Coverter
  • サービスエンドプッシュ技術:SSE
  • 小結
  • 前言
    SpringBoot自体はSpring開発方式を簡素化した新しい技術を追加していません.
    Springの出現自体はJavaEEの開発を簡略化するためである.
    しかしSpringシステムが大きくなるにつれてSpring自体も様々な配置に引っ張られ、Spring開発はJavaの半分xmlという戯れがあります.
    Spring BootはSpring 4を利用して提供し始めた条件注釈で、Springプロジェクトの開発を大いに簡略化しました.
    今の開発者は幸せです.言語からツールチェーンまで、そして今のネット環境と学習環境は勉強したいなら、収穫があります.
    本文はSpringとSprigMVCの核心機能を整理して、基礎概念に対して説明しません.Springを勉強する前に、小さい仲間はSpringに対してある程度知っている必要があると提案します.
    Springコア
    Springフレーム設計原則
    Springの出現はJavaEEの開発を簡略化するために設計過程でいくつかの基礎原則を遵守しています.
  • POJOを用いて軽量級と最小侵入型の開発を行う
  • .
  • は、注入に依存し、インタフェースプログラミングに基づいて松結合
  • を実現する.
  • は、AOPとデフォルト習慣によって声明式プログラミングを行う
  • .
  • AOPとテンプレートを使用してモード化コードを減らす
  • 制御反転と依存注入
    名詞の解釈
  • 制御反転
  • Javaコードを作成する時、一番長い操作は一つのオブジェクトを獲得することかもしれません.元の段階では、newキーワードを使ってオブジェクトを作成することができます.もちろん、工場モードを通じて対象を取得することもあります.
    いずれにしても、この対象は私達自身 が来たのです.
    Springでは、コンポーネントを作成してからSpringに管理し、必要なところで という音がしたら、Springが対象の初期化を担当します.
    オブジェクトを元の自分で作成し、Springで管理するプロセスに変更します.これはコントロール反転です.
  • 注入に依存するものは何ですか?
    Springは私達の説明により、適切な対象を私達に渡して使用します.これは注入に依存しています.
    コアコメント
    制御反転と依存注入の間に、いくつかの注釈を使用します.
    声明Bean:@Component、@Service、@Repository、@Controller
    注入ビーム:@Autowired、@Inject、@Resource
    @Configration:現在のクラスは構成クラスであると宣言します.
    @ComponentScan:ビーンをスキャンし、スキャンされたビーンを初期化してSpring容器に入れて管理します.
    面に向かってプログラミングする
    プロセスとオブジェクト指向は、私たちがよく知っている2つのプログラミングモデルです.
    面に向かうのも同じで、プログラミングの手本でもあります.
    それは他のプログラミングの範式に対する転覆ではなくて、ただ1つの役に立つ補充です.適切な適用シーンがあります.
    例えば、特定の方法の呼び出し前と呼び出し後、呼び出しの方法パラメータと戻り値を承諾したいです.この時はAOPを使うととても便利です.そうでなければ、私たちは手動でメソッド内部でログの印刷を行う必要があります.
    SpEL式
  • は、固定された文字列をメンバー変数
  • に注入する.
    @Value("       ")
    private String str;
    
  • SpEL式を用いてシステム属性を取得し、注入する
  • .
    @Value("#systemProperties['os.name']")
    private String osName;
    
  • SpEL表現を用いて乱数を生成する
  • .
    @Value("#{T(java.lang.Math).random()*100.0}")
    private double randomNumber;
    
  • 他のビームの属性を注入する
  • .
    @Value("#{demoService.property}")
    
  • 注入ファイル
  • @Value("classpath:com/ist/a.txt")
    private Resource resource;
    
  • ネットワークリソースを注入する
  • @Value("http://www.baidu.com")
    private Resource resource;
    
  • 属性ファイルのキー値を注入する
  • @Value("${book.name}")
    private String st;
    
  • 注入プロファイル
  • @Autowired
    private Environment env;
    
    現在のクラスで使用されているプロファイルをenvに注入し、env.getProperty("book.name)")を呼び出して、データを取得することができます.
    ビーンのライフサイクル
    ビーンの初期化と廃棄の時には何かをする必要があります.
  • @Bean注釈を使用する場合、initMethodとdestoryMethod属性により
  • を指定します.
  • はビーンにおいて、@PostConstruct(コンストラクション実行後実行)と@Predestory(Bean破壊前に実行)を使用する場合、第二の方式を使用すると、JSR-250を追加して
  • をサポートする必要があります.
    <dependency>
        <groupId>javax.annotationgroupId>
        <artifactId>jsr250-apiartifactId>
        <version>1.0version>
    dependency>
    
    
    基本的にはinitMethodとdestoryMethodを使えばいいです.
    非同期法
    マルチスレッドを使用して、方法の非同期呼び出しを実現します.
    1、スレッド池を配置する
    package cfg.spring;
    import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.AsyncConfigurer;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    import java.util.concurrent.Executor;
    /**
     * Created by nbcoolkid on 2017-05-20.
     */
    @Configuration
    @EnableAsync
    public class TaskExecConf implements AsyncConfigurer{
        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
            threadPoolTaskExecutor.setCorePoolSize(5);
            threadPoolTaskExecutor.setMaxPoolSize(10);
            threadPoolTaskExecutor.setQueueCapacity(25);
            threadPoolTaskExecutor.initialize();
            return threadPoolTaskExecutor;
        }
    @Override
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
            return null;
        }
    }
    
    
    2、配置クラスで@EnbleAsyncを使って非同期タスクへのサポートを開始する
    Beanを実行する中で@Asyncを使ってコメントします.これは非同期のタスクです.クラスに表示されている場合、このクラスのすべての方法は非同期です.
    タイム?タスク
    いくつかの簡単なタイムミッションに対して、Springも自分の実現があります.
    使用方法:
    1、配置類に@EnbleSchedulingを使ってサポートを開始する
    2、任務方法に@Scheduledを使用し、core表現で時間を設定する
    package org.zln.spb.task;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.zln.spb.ann.Task;
    /**
     * Created by nbcoolkid on 2017-10-17.
     */
    @Task
    public class Demo01Task {
        @Scheduled(cron = "0/5 * * * * ? ")
        public void showH() {
            System.out.println("      ---");
        }
    }
    
    
    ここの@Taskコメントはカスタムコメントです.
    package org.zln.spb.ann;
    import org.springframework.stereotype.Component;
    import java.lang.annotation.*;
    /**
     * Created by nbcoolkid on 2017-10-17.
     */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Task {
        String value() default "";
    }
    
    
    package org.zln.spb.task;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableScheduling;
    /**
     * Created by nbcoolkid on 2017-10-17.
     */
    @Configuration
    @EnableScheduling
    @ComponentScan
    public class TaskConfig {
    }
    package org.zln.spb.task;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    /**
     * Created by nbcoolkid on 2017-10-17.
     */
    public class Main {
        public static void main(String[] args) throws InterruptedException {
            AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TaskConfig.class);
            Thread.sleep(1000 * 3600);
        }
    }
    
    
    結び目
    Springの内容はもちろんこれだけではありませんが、SpringBootでは一部の内容が深く説明されています.
    SpringMVCコア
    MVCモード思想
    MVCモードではないバックエンドコードを作成した場合、直接にサービスロジックを利用して実行します.
    MVCのバックエンド開発に対する大きなメリットを深く感じられます.
    MVCとは、バックエンド処理コンポーネントをモデル、ビュー、コントローラに区分し、各コンポーネントに独自の機能シーンがあり、コード上で階層化したものです.論理をはっきりさせる
    @Controller Advice
    コントローラの強化は、一般的にコントローラの全体構成に使用されます.
    私がよく使う機能の一つは@Controller Adviceを使って全体の異常を捉えることです.
    ファイルアップロード
    すべてのMVCフレームはファイルアップロードに言及します.
    Spring Bootの中にもっと簡潔な方法がありますので、ここでは言いません.
    Http Message Coverter
    サービス先押し送技術:SSE
    結び目
    この文章を書くのは主にSpingのよくある知識点を守るためで、後続のSpringBootの展開のために基礎を作ります.
    太めのスタイル