6

私はSpring Frameworkが初めてです。これ (3.1) を Web アプリケーションに導入したいと考えています。現在、Web レイヤーではストラットを使用し、ビジネス レイヤーではサービス ファサードとビジネス オブジェクトを使用し、永続化レイヤーでは自己記述の JDBC DAO を使用しています (すべて密接に結合されています!)。

com.mydomain.web パッケージのみをスキャンして、いくつかの .xml 構成を作成しました。1 つはサーブレット構成用です。com.mydomain.bs および .bo パッケージをスキャンするサービス レイヤー appContext-service.xml 上の別の 1 つと、.dao パッケージをスキャンする DAO レイヤー appContext-persistence.xml 用の 1 つです。

適切なプロジェクト依存関係を持つ 4 つの Eclipse プロジェクトがあります。Web、Business、Common (ドメイン オブジェクト、DTO、例外などを含む)、DataAccess です。

可能な限りアノテーションを使用したいのですが、JDBC テンプレートを使用して MVC コントローラー、インターフェースを備えた新しいサービス、およびインターフェースを備えた新しい dao を既に作成しています。

今私の質問は次のとおりです。

  1. すべてのコードを一度に書き直すことはできません。ここでは、より大きなコード ベースについて話しているのです。しかし、新しく作成されたサービスが、(まだ) Spring に対応していないサービスやビジネス オブジェクトからも必要な場合はどうすればよいでしょうか? それらは Bean ではなく、Spring によって作成されたものでもありません。サービス Bean を取得するにはどうすればよいですか?

  2. バッチ処理、ファイル システムとデータベース テーブルの定期的なクリーンアップなどのためのスタンドアロン アプリケーションがいくつかあります。それらは cron (UNIX cron) によってトリガーされるため、独自の JVM を持っています。さまざまな .xml 構成を考えると、ここで Spring サービスをどのように使用するのが最適でしょうか?

  3. 私のセットアップはまったく意味がありますか?

洞察をありがとう。

4

1 に答える 1

9
  1. スプリングにすべての Bean のライフサイクルを処理させることは非常に一般的です。Spring Bean ではないオブジェクトは、うまくいけばどこかで初期化されます。そのイニシャライザーをSpring Beanにして、アプリケーションコンテキストを認識させます

     public class SpringContextHolder implements ApplicationContextAware {
    
       private static ApplicationContext applicationContext = null;
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
             this.applicationContext = applicationContext;
        }
        public void init(){
    
            ServiceBean1 srv1 = (ServiceBean1)applicationContext.getBean("serviceBean1");
    
            myNonSpringObject.setService1(srv1); // Or something
        }
    }
    
  2. スタンドアロンの Spring アプリのセットアップは非常に簡単です。Spring XML を作成し、Bean を配線するだけです (スキャン/アノテーションまたは XML を介して)。メイン メソッドでこれを行うことはあまりお勧めできませんが、スタンドアロン アプリケーションでこの設定を取得する方法は簡単に理解できます。アプリケーション自体は実際には多くのライフサイクル ロジックを実行するべきではなく、Spring に実行させるべきであることに注意してください。

    public class StandaloneSpringApp{
      public static void main(String[] args){
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        SomeBeanType bean = (SomeBeanType)ctx.getBean("SomeBeanName");
        bean.doProcessing(); // or whatever
      }
    
    }
    
  3. スコープ全体を視覚化することはできませんが、セットアップは完全に理にかなっていますが、あなたのアプローチは、モジュール化された大規模なスプリング アプリケーションの良い出発点です。

于 2012-07-27T07:31:30.390 に答える