春についての講演
Java開発者のための春は、毎日それを使用している私たちの日常の開発、フレームワークの中で最もよく知られています。それは使いやすいのさまざまなメリット、便利を持っています... ...
我々それがIOCを春になると、AOP、依存性注入、ノートや他の専門用語について話され、Javaへの新しい多くの人々が、混乱している、直感的にどのような地獄を理解することは困難であるが、複数の使用私はそれが私たちをもたらした利便性と恋に落ちました。
探検春
我々は私がちょうど変数クラスで@AutoWritedを追加するのはなぜ?それを達成する方法を、IOC好奇心熟練されます使用する場合は、この変数を使用することができるでしょうか?疑いで、私たちは答えを見つける、ソースコードをオンに開始されます。いくつかの努力の後、我々は最終的に見つけ、バネcontext.jarパッケージを、見つけます
オブジェクトAbstractApplicationContext方法をリフレッシュし、実現および手順があり、当社の他の素晴らしいの全体のバネ機能の実現であるコア、、だけでなく、非常に複雑で、デザインパターンの多くを使用して、我々が設計していない多くの場所、全体像を垣間見ることは困難ですそれはとても実現かかる私はなぜ知っています。しかし、我々はまだIOCコンテナが実際にはHashMap、使用されている知っている
、実際に反射、AOP完成動的プロキシを使用して依存性注入を。少しめまいを参照するには、コードの大部分があり、それはライフサイクルの堅牢性を強化し、様々な特性を確保することです。とにかく、それはすべての他の誰かのものだった、私たちは私たちがたくさん見ソースコードを使用しますが、いくつかは、それを自分で出てください。
春の実現分析
とにかく、他の人が他の人が自分自身のものは私たち自身の外で書くことを実現します。今、彼が達成するために決定されていること、そして私たちは、分析、分析する必要があります。
すべてのレベルのために控えめのコードを実行し、それをクリアするためにどのように春?
ばね構成を使用することは、固定されたパターンに従って、タイプを識別するために、コントローラ、サービス、コンポーネント、豆、構成に階層規則よりも大きいです
春には、依存関係を管理する方法ですか?
注釈またはXMLで
春は、管理する必要のあるクラスを発見する方法ですか?
注釈パケットは、パススキャン+マークされています
春には、依存性注入を達成する方法ですか?
アノテーション・オブジェクト・インスタンスをAutoWrited反射マーカを追加することによって
豆バネ管理する方法?
HashMapのコンテナを使用して、設定して、シングルコンテナは、Beanの実施形態
それを達成する方法のスプリングAOPファセット?
動的プロキシモードを使用すると、デフォルトの実装CGLIBとJDK二つの方法を提供
ときにバネがメモリにロードされますか?
springMvcは、web.xml、springApplicationを初期化することによってトリガさspringbootを配置入口によってトリガされます
実現春のコア機能は、どのようなポイントが関与しますか?
1.定義と使用の注釈
2.コンテナの初期化
3.読み取りおよび使用プロファイル
4.sevlet使用
注釈の定義および使用
反射6.
7.urlルーティングとマッピング方法
8.パラメータの分析および結合
9.定期的かつエスケープ
開始
まずMavenプロジェクトを作成し、以下のように、コードが構成されています。
ジャーパッケージの依存関係を追加します。
2つのJARパッケージプラスプラグがあります。
javax.servlet-api.jarのコアコードと処理要求を有効にします
結合するために使用さfastjson.jar JSONパラメータ
Webコンテナ桟橋スタートとして使用桟橋-のmaven-pluginのを
次のようにMavenの完全なコードは次のとおりです。
<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> < プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0" のxmlns:XSI = "http://www.w3.org / 2001 / XMLスキーマ・インスタンス」 のxsi:のschemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 </ modelVersion > < のgroupId > com.honstat </ のgroupId > < たartifactId >試験スプリング</ たartifactId > <1.0-SNAPSHOT </ バージョン> < 依存性> < 依存性> < groupIdを>のjavax.servlet </ のgroupId > < たartifactId >のjavax.servlet-API </ たartifactId > < バージョン> 4.0.1 </ バージョン> </ 依存> < 依存関係> < groupIdを> com.alibaba </ groupIdを> < たartifactId >fastjson </たartifactId > < バージョン> 1.2.56 </ バージョン> </ 依存関係> </ 依存関係> < 構築> < プラグイン> < プラグイン> < groupIdを> org.eclipse.jetty </ groupIdを> < たartifactId >桟橋-のmaven-pluginの< / たartifactId > < バージョン> 9.4.5.v20170502 </ バージョン> <設定> <scanIntervalSeconds > 10 </ scanIntervalSeconds > < Webアプリケーション> < のcontextPath > / </ のcontextPath > </ Webアプリケーション> < HTTPConnectorの> < ポート> 8080 </ ポート> </ HTTPConnectorの> </ 構成> </ プラグイン> < プラグイン> < のgroupId > org.apache.maven.plugins </ のgroupId > <たartifactId >のmaven-コンパイラプラグイン</ たartifactId > < 設定> < ソース> 1.8 </ ソース> < ターゲット> 1.8 </ ターゲット> </ 設定> </ プラグイン> </ プラグイン> </ 構築> </ プロジェクト>
フロントコントローラクラスを作成します
リターンの実施後、対応する方法に適合フロントコントローラ・サーブレット要求特別な処理は、フロントコントローラは、私は別のブログを参照することができるものであり、「SpringMvc要求処理フロー源クエスト」
ここでは、それが継承され、CJDispatcherServletと呼ばれるクラスを作成するHttpServletクラスをし、initのHttpServletの()、doGetメソッド()、doPostメソッド()これらの三つの方法、図HomeService最初は無視をオーバーライドして、StudentServiceを書き込むことはできません
web.xmlの構成
<servlet>および<servlet-mapping> 2つのラベルを設定
<サーブレット>が必要です
1.サーブレットの名前を指定します。
2.フロントエンドコントローラクラス指定された処理要求
3.初期設定ファイルのパスを設定します。
完全なweb.xmlファイルを次のように
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>cjservletMVC</servlet-name> <servlet-class>com.honstat.spring.service.CJDispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>spring/application.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cjservletMVC</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
添加注解
我们知道,spring里面是通过给类加注解来识别各种使用场景的,那我们就来实现几个必用的
作用在类上的:
JCController
JCService
JCComponent
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface JCController { String value() default ""; }
全部采用这种类型
作用在方法上和类上的:
JCRequestMapping
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD}) public @interface JCRequestMapping { String value() default ""; }
作用在字段上的:
JCAutoWrited
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface JCAutoWrited { String value() default ""; }
到此我们已经初步的创建完了需要准备的类,准备工作告一段落。
由于篇幅有限,下一篇开始实现核心功能了!