

@Beanについて勉強して、思ったのですが@Beanの対象にするクラスは一般的にフィールドとゲッターセッターを持つクラスが対象なのでしょうか。またそうである場合、@Beanを使わずにオブジェクトを宣言して下記のコードのようにするのとどう違い、どのようなメリットがあるのでしょうか。

[code]

    TestForm testForm = new TestForm();
    
    testForm.setHp("123");
    testForm.setName("Tanaka");
    
[/code]


CC BY-SA 4.0
2017-07-02T07:18:15.063
36026
2020-07-17T21:01:58.557
2020-07-17T09:42:38.093
19110
17348
question
spring-boot java8
spring bootの@Beanの対象となるクラスについて


@Bean を付与してオブジェクトを生成する場合、それは spring の DI コンテナの仕組みを利用していることになります。

DI コンテナを利用する対象は、今例に上がっているような、値を表すようなオブジェクトよりは、 FormRegistrationService
といったような、プログラム実行時にはインスタンス、そしてその中身のフィールドがただ一つに定まるようなクラスに対して行うのが一般的です。

その場合には、フィールドを解放するのではなく、下記のように、コンストラクタ注入する方が、誤って変更することがないので良いのではないか、と考えます。

例:

[code]

    class FormRegistrationService {
        private CharacterDao characterDao;
        public FormRegistrationService(CharacterDao characterDao) {
            this.characterDao = characterDao;
        }
        public void registerCharacter(String name, String hp) {
            // 実装コードは省略
            // characterDao を内部で利用して、
            // データの登録を行う。
        }
    }
    
[/code]


CC BY-SA 4.0
2017-07-15T13:31:21.077
36388
2020-07-17T16:50:10.407
2020-07-17T16:50:10.407
35558
754
36026
answer


> @Beanについて勉強して、思ったのですが@Beanの対象にするクラスは一般的にフィールドとゲッターセッターを持つクラスが対象なのでしょうか。

いいえ。どちらかというとPOJOのようなものは `@Bean` で生成する対象にはなりにくいと思います。

その理由はまさに質問文に書かれている通り、自前で`new`するのと違いがない(それどころかDIコンテナが関与するようになる分、仕組みが無駄に複雑化する)からです。

* * *

質問文に書かれているような考えに至った具体例があると、回答ももう少し具体的にできるかと考えます。


CC BY-SA 4.0
2020-07-17T21:01:58.557
68682
2020-07-17T21:01:58.557
2808
36026
answer