2017-09-08 2 views
0

私はしばらくこのことに苦労してきました。 は基本的に私は次のように定義豆ました:スプリング:豆を強制的にリロードする

<bean id="tipoUfficioGiudiziarioListImpl" singleton="false" 
    class="java.util.ArrayList" > 
</bean> 

をし、それが基本的には、テーブル内のすべてのエントリのcollectioです。今問題は、このBeanがサーバーの起動時(または最初に私がlazy-init="true"に設定した場合)にロードされますが、db(アプリケーション自体またはSQLを介して)にエントリを追加した場合、Beanはリロードせず、コレクションの使用時に新しいエントリが表示されます。

これを強制的にリロードまたは無効化する方法はありますか?次の最初の使用時にロードされるようにしますか?

私は

+2

本当の欠陥、私見、デザインです。あなたは、データベースからのダイマンデータを持っていて、それを単一のSpringオブジェクトにマップします。決して働かないでください。メソッドコールを介してデータを取得(キャッシュ、更新)できるサービスであるSpring Beanを作成します。 – GPI

+0

ええ私はそれが私のデザインではないことを理解しています...実行時の広告エントリの能力は、SQLを使って直接追加される前に開発している機能です(そしてたぶんサーバは毎回再起動しました...)。もちろん、使用するたびに手動でリストを読み込むことができますが、できるだけシンプルにすることをお勧めします。とにかくありがとうございました –

答えて

1

はたぶん、あなたは新しいBeanインスタンスあなたがそれを使用するたびにインスタンス化したい春1.2を使用している、あなたは、この使用したプロトタイプのスコープを行うことができますか? <bean id = tipoUfficioGiudiziarioListImpl" class="java.util.ArrayList" scope = "prototype">

+0

私はこのエラーが発生しました: '属性"シングルトン "は、要素型" bean "に対して宣言されている必要があります 2.xの代わりにスプリング1.2を使用しているためですね –

0

あなたは次のように行うことができます。

@Aspect 
@Component 
public class DaoAspect { 
    @Autowired 
    TipoUfficioGiudiziarioListImpl impl; 
    //your dao path,intercept your dao operation. 
    @Before("execution(* com.test.dao..*.*(..))") 
    public void doBeforeInServiceLayer(JoinPoint joinPoint) { 
     /* 

      TODO some condition 

     */  
     impl.loaddata(); 
    } 
} 
+0

不幸にも私はできませんSkypeは現時点では:(あなたは少なくとも正しい方向に私を向けることができますか? –

+0

あなたがリロードしたいと思っているwrite.ifで試してみてください、春にはそれを行う方法がありますが、少し不合理です。データをロードする "tipoUfficioGiudiziarioListImpl"にあります。 – cameron

+0

はい、できますが、古いものを置き換えて保存しますか?毎回 "一時的な"読み込みが可能ですが、何をしたいですか?要素を追加/編集/削除したときにリロードして、それを忘れてしまいます。 –

関連する問題