0

Spring MVC で Controller から Service Layer にアクセスする最良の方法は何ですか? SpringMVC のアノテーションを使用しています。

以前は、コントローラーのすべてのメソッドで ClassPathXMLApplicationContext(spring-bean-name.xml) を呼び出して、Bean ファクトリから毎回 Bean を取得していました。

Spring MVC でのカスタム コントローラーからのサービス レイヤーへのアクセスに関する解決策から、サービス Bean を自動配線する必要があることを理解しています。

しかし、コントローラーが複数のサービスにアクセスするとしたら、複数の Bean を注入する必要があるでしょうか? ただし、特定のサービスをコントローラー内の 1 ~ 2 つのメソッドでのみ使用する必要があり、関数変数ではなくクラス変数にするのは適切ではないため、これは良い方法ではありません。

4

3 に答える 3

3

その通りです。使用するサービスを自動配線する必要があります。クラス変数とローカル (関数) 変数について心配する必要はありません。これが DI パターンの実装方法です。

最も厳密な OO 設計の意味では、オブジェクトの状態の記述に関与しない限り、クラス レベルで変数を宣言してはならないという点があります。ただし、DI (依存性注入) は非常に確立されたパターンであり、実際にサービスを使用するメソッドの数に関係なく、サービス Bean をオートワイヤード クラス メンバーとして嫌う開発者はいません。

余談new ClassPathXMLApplicationContext("spring-bean-name.xml")ですが、すべての方法で行うことは絶対に、100%間違った方法です。これには、そのメソッドを実行するたびに新しい bean-factory と bean-context を作成することが含まれますが、これは大きなオーバーヘッドであり、まったく不要です。bean-factory は一度作成する必要があります (サーブレットエンジン環境の場合は、DispatcherServlet または ContextLoaderListener を使用して)。

于 2012-11-20T08:20:56.480 に答える
0

Bean ファクトリをインスタンス化する静的クラスを作成し、この静的クラスのカスタム静的 getBean メソッドを使用できます。

static class SpringConfig()
{
    private static ApplicationContext ctx = null;
    static
    {
        ctx=new ClassPathXmlApplicationContext("context.xml");
    }

    public static Object getBean(String beanName)
    {
        return ctx.getBean(beanName);
    }
}
于 2013-02-11T12:31:55.137 に答える
0

これが、同じ依存関係を使用するすべてのメソッドを一緒に保持しようとする必要がある理由です。これは低結合です。悪い習慣は、依存関係をグローバル変数として注入しないことです。悪い習慣は、メソッドをグループ化してクラスの結合を弱めないことです。

于 2015-12-04T19:59:10.923 に答える