問題タブ [lazy-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - なぜ怠惰なのですか静的コンテキストに制約されていますか?
Lazy Tを使用してメモ化を実装したいのですが、初期化関数には静的コンテキストが必要なようです。
たとえば、次のコードはコンパイルを拒否し、非静的メンバーaおよびbにアクセスできないことを警告します。Lazyオブジェクトはそれ自体がインスタンスメンバーであり、静的コンテキストでは可視性がないため、これがなぜそうなのかは私にはわかりません。
java - 別のSpring Beanが初期化されたら、Spring Beanを初期化するための良いパターンはありますか?
私のシステムで発生し続ける状況があり、適切なコード/構成パターンを探しています。私はまだ私を幸せにするものを思い付いていません。
システムはスプリングベースで、ほぼすべての Bean が遅延初期化されます。同じスプリング コンテキストを使用するさまざまなメイン クラスが多数あります。それぞれが、いくつかの Bean を明示的に初期化することによって Bean の異なるサブセットを使用することになり、Spring がすべての依存関係を初期化します。この1つのケースを除いて、すべてがうまく機能します。
問題は、一部の Bean が (Spring 構成で) ビジネス Bean が宣言されているパターンを使用し、別の Bean がそれに依存していくつかの周辺機能を提供することです。ただし、他の Bean の自然な依存関係は前者であり、ビジネス クラスです。
次に例を示します。
したがって、上記の 2 番目の Bean は基本的に、最初の Bean のメソッドを定期的に呼び出すトリガーをスケジューラに登録します。これらの Bean はすべて遅延であることを忘れないでください。アクティブな「キャッシュ」クライアント Bean がない場合、「cacheCuller」を作成して「キャッシュ」を初期化する必要はありません。依存関係に注入する必要があるときに「キャッシュ」を初期化する必要がありますが(これは簡単です)、その後すぐに「cacheCuller」を初期化することも必要です(これは難しいです)。
スケジューリングロジックを「キャッシュ」クラスに入れることができることは知っていますが、Spring 構成のままにしておくとよいと思いました。また、「キャッシュ」クラスをスプリング固有のコードから解放したいと思います。他の Bean が自然に「cacheCuller」に依存している場合、これは簡単ですが、そうではありません。
Bean を MBeanServer に登録するなど、他の領域でも同じ状況が発生します。2 番目の Bean でビジネス Bean を登録したいのですが、他の (3 番目の) Bean の依存関係として使用されていない場合は、ビジネス Bean 自体を初期化したくありません。
c# - リフレクションによって初期化するオブジェクトの遅延初期化
フィールドとプロパティに独自の属性[Finder]
があり、必要に応じてすべてのフィールドとプロパティを初期化する一種のファクトリがあります。質問: 初期化中のオブジェクトに対して、一種の遅延初期化 (このオブジェクトのいくつかのメソッドを呼び出したときにのみオブジェクトが作成される) を実行したいと考えています。注: プロパティとフィールドは異なるタイプである可能性があります。
json - Struts2 グリッド json
FetchType.LAZY としてリストされている Hibernate オブジェクトを除外するにはどうすればよいですか? org.hibernate.LazyInitializationException が発生するため、問題が発生します。オブジェクトをシリアル化しようとしていることを理解していますが、セッションが閉じられているためできません。どうすれば無効にできますか? これを行うオブジェクトがたくさんありますが、それらが多すぎるため、それらを熱心にしたり削除したりすることはできません。助けてください。
java - Singleton 実装における Initialize-On-Demand イディオムと単純な静的初期化子
静的初期化を使用してスレッドセーフなシングルトンを実装する場合、Initialize-On-Demand イディオムは本当に必要ですか、それともインスタンスの単純な静的宣言で十分でしょうか?
静的フィールドとしてのインスタンスの簡単な宣言:
対
Brian Goetz がこの記事で最初のアプローチを推奨しているため、私はこれを尋ねます。
http://www.ibm.com/developerworks/java/library/j-dcl/index.html
この記事では後者を提案していますが、
http://www.ibm.com/developerworks/library/j-jtp03304/
後者のアプローチには、前者にはない利点がありますか?
c# - Lazy の利点標準の遅延インスタンス化を提供しますか?
この例を考えてみましょう。遅延初期化の 2 つの可能な方法を示しています。スレッドセーフであることを除いて、ここで Lazy<T> を使用する特定の利点はありますか?
アップデート:
上記のコードは単純な例として考えてください。データ型は関係ありません。ここでのポイントは、Lazy <T> と標準の遅延初期化を比較することです。
java - SpringのJsonエラー
私はこれを試しました:
}
getmainsubjects.html?id=1 を呼び出すと、次のエラーが表示されます。
net.sf.json.JSONException: org.hibernate.LazyInitializationException: ロールのコレクションの遅延初期化に失敗しました: fi.utu.tuha.domain.Mainsubjects.aiForms、セッションまたはセッションが閉じられませんでした
直し方?
java - データベースから削除せずに JPA エンティティをフィルタリングする
再帰構造を許可するために、それ自体 (parent_id) への FK を持つデータベース テーブル "viewmodule" があります。
私の Java アプリケーションは JPA/Hibernate を使用して、そのテーブルのエンティティをマップします。テーブルの「タイプ」列を使用する @Discriminator アノテーションによって解決されるエンティティ階層を修正しました。
私のタスクは、このテーブルからすべての要素を (詳細に) ロードすることですが、フィールド「非表示」が true に設定されているものは除外します。明らかに単純なフィルターメカニズムです。私の最初のアプローチは、Hibernate Filter アノテーションを使用することでした。これは、最初のレイヤー (parent_id = null のすべてのビューモジュール) でうまく機能します。ただし、フィルターは「子」関係では機能しません。(私の実際のモデルでは、ViewModule のさまざまなタイプの継承構造があります)
したがって、viewModule オブジェクト ツリーを再帰的にウォークスルーし、hide=true; を持つ子関係から viewModules を削除する小さな関数を作成しました。
ただし、すべてのオブジェクトはまだ jpa/hibernate entityManager の監視下にあるため、コレクションからのすべての削除は、データベースで削除として直接実行されます。したがって、フィルター関数はデータベースからエンティティを削除しますが、これは悪いことです。
休止状態セッションから「エビクト」メソッドを使用して、フィルタリングする前にエンティティをデタッチしようとしましたが、それは LazyInitialisationException につながります。
だから、私のオブジェクトのすべての複製を防ぐために、私の質問はこの問題を解決する方法ですか? すべてのコレクションが初期化されるようにオブジェクトをデタッチする方法はありますか? または、コレクションをフィルタリングできる特別な Kung-Fu Chuck-Norris JPA アノテーションはありますか?
前もって感謝します
c# - POCOエンティティのリストの遅延初期化へのセッターでSystem.Lazyを使用する方法は?
System.Lazy to Lazy Initialization をエンティティで使用したい:
問題は SETTER にあります。次のエラーが発生します: The property ' System.Lazy<T>.Value
' has no setter
私がしたい場合はMyInstance.Questions = new List<Question> { ... }
?
続行するにはどうすればよいですか?
アップデート:
私はそれを避けようとしています:
私は何か間違ったことをしていますか?
c - init-on-first-use 関数の gcc 属性
最初の使用時に割り当てられて初期化される「定数」データへのポインターを返す関数、つまり、関数が呼び出されるたびに同じ値を返す場所に、gccconst
と属性を使用してきました。pure
例 (私の使用例ではなく、よく知られた例) として、最初の呼び出しでトリガー ルックアップ テーブルを割り当てて計算し、最初の呼び出しの後に既存のテーブルへのポインターを返す関数を考えてみます。
問題: これらの属性は副作用を禁止しているため、この使用法は正しくないと言われました。また、戻り値が使用されない場合、場合によってはコンパイラが呼び出しを完全に最適化する可能性さえあります。const
/属性の使用は安全ですか、または関数への呼び出しは関数への 1 回の呼び出しと同等であるが、関数への 1 回の呼び出しは関数への 0 回の呼び出しと同等ではないことをpure
コンパイラーに伝える他の方法はありますか? N>1
言い換えれば、関数は最初に呼び出されたときにのみ副作用があるということですか?