@Componentと@Controllerの違い


0. Spring MVC. 軽書きは喜劇で、深入浅出は悲劇だ。


これは多くの開発者が使用している非常に簡単な機能です.クライアントから永続層への論理は一見簡単そうに見えるが、オブジェクト向けの真髄が含まれている.音声機能はどうですか.宣言だけですべてをつなぐことができます.
私がまだ新人だったとき、私は「どうしてこんなに複雑なことをしたの?」と思った.「私はいつもそう思っています」「スプリングを使っているので、使っていない時と比べてどうですか」面接官の質問に対しては、「もっと難しいと思っただけです.」こんなつまらない答えもあった.
しかし、今は切実だと感じています.無駄だと思うMVC層も、一般人になりたいという思いも、数え切れないほどの先輩開発者たちの血涙と絶望、彼らが吐き出す汚い言葉と灰皿に積まれたタバコの吸い殻たちだが、それでも、より良い答えを探し続ける先駆者たちがもたらす春の風だ.
今、開発者として、私たちも絶えずもっと良いものを創造し、もっと良い答えを探求しなければなりません.同时に、先辈たちが出した答えを逆押しして、どのような困难が、なぜこのような答えを出したのかを探ってみましょう.
開発者は理工系ですが、私たちの生活の問題を解決しました.
明確な答えもなく、より良い答えもなく、哲学に似ている.
もちろん、今日は全く違う@Componentと@Controller宣言です.この二つの違いを知りたいです.

1.2つの方法の用途は何ですか。


@Component言語はクラスに宣言する言語です.次に、宣言を宣言するだけでクラスをspring beanオブジェクトとして使用できます.
Spring MVCもSpringコンテキストで動作するため、使用するすべてのクラスを空に登録する必要があります.コントローラとしてのクラスもそうです.問題は、コントローラが@Componentではなく@Controllerオペレーティングシステムを使用している理由です.
@Componentでは、クラスをスプリングシートとして使用できます.@コントローラも同じ機能を持っています.しかし@Controllerにはもっと多くのものがあります.

2.@Componentが@Controllerに取って代わることができるか。


まず2つの方法の違いを見てみましょう.コントローラが入る必要がある位置に@コンポーネントを追加します.
@Component
public class AnnotationController {

    @RequestMapping("/test")
    public String annotationTest() {
        System.out.println("Request reached here");
        return "testdir/test";
    }

}
これは非常に簡単な例です.コントローラの代わりに@componentを使用します.このまま接続すると何が起こるのでしょうか?本当に正常に働けますか?

間違いが痛快に落ちた.404エラー.404エラーにも2つのケースがあります.urlパスは見つかりましたが、戻ってくる画面が見つからなかったり、urlパス自体が見つからなかったりします.

どのようにログを検索しても、メソッドの内容は出力されません.urlパス自体が見つからないだけです.
では、@Controllerを正しく貼り付けて、もう一度試してみましょう.
@Controller
public class AnnotationController {

    @RequestMapping("/test")
    public String annotationTest() {
    	System.out.println("Request reached here");
        return "testdir/test";
    }

}
@Componentを@Controllerに変えただけです.本当にこれで解決しましたか?

「ちょうどいいところに来た」万事順調だという意味だ.

メソッドの内容も同様に出力が良好である.@Controllerには、コンポーネントとは異なりurlとクラスを接続する機能もあります.

3.コントローラクラスのインバースアクティビティ。


@ControllerはControllerクラスに貼り付けられています.Controllerクラスは、クライアントとのリクエストと応答のインタラクションを担当します.
この逆アクティビティを実行するには、コントローラクラスが少なくとも2つの条件を満たす必要があります.
  • HttpServeretの機能が必要です.
  • url(検索)-クラス(サーバ)-画面(応答)は相互に接続する必要があります.
  • しかし,上記のソースコードから見ると,この2つの機能を実現する部分はどこにも存在しない.では、Controllerクラスはどのようにしてこの2つの機能を実現しているのでしょうか.
    その二つの機能を持つ技術は….

    4.@Controllerでは考えられない停滞。推測を表す


    答えは@Controller?半分対半分が間違っている.
    この2つの機能を実行する方法は@ResquestMappingです.
    何だよ、小僧.
    もちろん、@ResquestMappingについて詳しく説明したいのですが、この部分は次の投稿で個別に議論します.短い内容ではない
    いずれにしてもurlとクラスをマッピングしてリクエストと応答を接続することは@requestMappingの役割です.簡単に説明すると、HandleMappingはURLとクラスがペアになっているキャラクターです.
    URL(キー):スプリング空席(値)
    大事なのはこれurlとspringbinは互いにペアを組む最終的にSpringContextで完了するタスクなので、URLからControllerクラスを呼び出すには、SpringBeanとしてControllerクラスを生成する必要があります.
    クラスを生成する方法は大きく3つありますが、@Componentを使用できるようになりました.
    また、コントローラ機能を実行する方法は@ResquestMappingです.
    この2つを組み合わせると@Controllerに取って代わることができますか?
    @Component
    @RequestMapping("")
    public class AnnotationController {
    
        @RequestMapping("/test")
        public String annotationTest() {
            System.out.println("Request reached here");
            return "testdir/test";
        }
    
    }
    AnnotationControllerは、@ResquestMapping機能とともにスプリング空のオブジェクトを作成します.
    大体Spring MVCのControllerクラスは既製です.今から実行しよう

    うん?!

    これはいいですよ.

    この部分は1行目に書いてありますが、半分は正しいですが、半分は間違っています.それがどういう意味なのか理解してみましょう.ソースを直接開けましょうああ...中の肉を見て

    まずはお餅に@Componentと書いてありますコンポーネントの機能が含まれています.上に書いてある注釈もあります.コントローラが何なのか説明しています.
  • 'で宣言されたクラスが「コントローラ」であることを示します.「
  • 」(例web controller)
  • 」「ノイズは@Componentのプロフェッショナルな役割であり、実装体クラスがクラスパススキャンによって自動的に検出されるようにします.」
  • 」は一般的にorgである.springframework.web.bind.annotation.「requestmapping宣言に基づくプロセッサメソッドの宣言」
  • 結論的な説明だけなら.
    @Controllerは@Component+@ResquestMappingではありません.

    5.結論。


    @Componentでは、クラスをスプリングシートとして作成できます.
    @RequestMappingでは、クラスがControllerクラスの機能を実行できます.
    この部分は後で詳しく話します.
    @Controllerには、上記の2つの操作が含まれています.
    これも先駆者たちが見つけた簡単だが直感的で、非常に有意義な解決方法だ.
    軽書きは喜劇で、深入浅出は悲劇だ.