0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

初投稿

Last updated at Posted at 2023-09-08

前に、以下の質問をされた際に、回答することができなかったので、
自分なりの言葉でまとめる。

  1. @Controller@RestControllerの違いはなんですか?
  2. DIのメリットはなんですか?

1. @Controller@RestControler の違い

@Controllerとは、「Thymeleafによって生成されたhtmlを返却する。」
@RestControllerとは、「JSON、XMLを返却する。」

@Controller
@ResponseBody
public class hogeController {

}

上記のようにすれば@RestControllerとしたときと同じように、JSONを返すことができる。

2. DIのメリット

あるContorollerのメソッドAの中で、ServiceのメソッドBを呼び出すために、
リクエストが来るたびにインスタンスの生成を行なっていては非常にメモリ効率が悪くなってしまう。
そのため、Springで管理しているDIコンテナからBeanとして登録されているインスタンスを利用することによって、メモリ効率を上げれる。(DIコンテナではSingletonオブジェクトになるため、1つのインスタンスを再利用する。)

@RestController
public class Hoge {
    @GetMapping("/hogehoge")
    public FugaFuga hogeHoge () {
        // リクエストのたびに毎回、newしなければならない...
        Fuga fuga = new Fuga();
        FugaFuga fugaFuga = fuga.getFugaFuga();
        return fugaFuga;
    }
}
@RestController
public class Hoge {
    @Autowired
    private Fuga fuga;

    @GetMapping("/hogehoge")
    public FugaFuga hogeHoge () {
        // DIコンテナにBeanとして登録されているため、1つのインスタンス再利用する
        // そのため、newをしなくてよくなった!
        FugaFuga fugaFuga = fuga.getFugaFuga();
        return fugaFuga;
    }

こんな単純なことではないと思いますが、基礎中の基礎が理解できていなかったので反省...
業務では当たり前のように使用していたが、いざ言葉にするとなると、自分の知識の浅さにショックだった。
@Autowiredも非推奨な使い方を普段からしているので、その点もどこかで投稿する。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?