1

私のアプリケーションには、サーバー上の JAR ファイルから呼び出される static main メソッドが必要です。main が static の場合、それが呼び出すメソッドとフィールドは static でなければなりません。問題は、私の jdbcTemplate が自動配線されており、静的な場合は null です (これが機能しないことは理解しています)。メインから「静的」を削除して JAR から呼び出すことができないか、クラス内のすべてを「静的」にして jdbcTemplate を null にします。この問題の最善の解決策は何ですか。

前もって感謝します。

*この例ではメインが静的ではないことに注意してください。サーバー上で実行すると、「メインは静的でなければならない」と表示されます。どんな解決策でも、このことを覚えておいてください。

public class Purge {

 @Autowired
 protected JdbcTemplate jdbcTemplate;

 private int PURGE_DAYS = 14;

/**
 * @param args
 */
public void main(String[] args) {
    loadContext();
    purge();
}

ApplicationContext loadContext() {
    return new ClassPathXmlApplicationContext("applicationContext-purge.xml");
}

public void purge() {
    jdbcTemplate.execute("blah blah blah");
}

}
4

4 に答える 4

0
  1. あなたのmain方法はではありませんstatic。もしそうなら、非静的を呼び出すことはできませんpurge()。コードに何かが欠けています。new Purge()たまたま電話しませんか?その場合、Springはそのインスタンスを認識せず、何も自動配線しません。

  2. コンテキストをロードしたら、Purgeそのコンテキストからのインスタンスを取得する必要があります。

    Purge purge = loadContext().getBean(Purge.class)
    
于 2013-02-14T20:35:37.683 に答える
0

mainメソッドからBeanにアクセスする必要がある場合は、次を使用してみてくださいClassPathXmlApplicationContext#getBean

ApplicationContext context = loadContext();

this.jdbcTemplate = (JdbcTemplate) context.getBean("myJdbcBeanName");
于 2013-02-14T20:36:41.137 に答える
0

以下は、「春」の方法で行うエレガントな方法です。

   @Component
    public class Purge{

     @Autowired
     protected JdbcTemplate jdbcTemplate;

        public void purge(){
                  jdbcTemplate.execute("blah blah blah");

        }

        public static void main(String[] args) {
             ApplicationContext context = 
                    new ClassPathXmlApplicationContext("somthing.xml");
            Purge p = context.getBean(Purge.class);
            p.purge();
        }


    }
于 2013-02-14T21:27:40.873 に答える
0

ご協力いただきありがとうございます。jdbcTemplate Bean を取得する方が簡単であることがわかりました。これが私の解決策でした。

public class Purge {

private static int PURGE_DAYS = 14;

/**
 * @param args
 */
public static void main(String[] args) {
    purge((JdbcTemplate) loadContext().getBean("jdbcTemplate"));
}

static ApplicationContext loadContext() {
    return new ClassPathXmlApplicationContext("applicationContext-purge.xml");
}

public static void purge(JdbcTemplate jdbcTemplate) {
    jdbcTemplate.execute("blah blah blah");
}

}

于 2013-02-15T16:06:38.267 に答える