問題タブ [spring-annotations]
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.
java - @Transient アノテーションで @Value アノテーションを使用できませんか?
休止状態を使用するためのテーブルをマップするクラスがあります。マッピングを定数として使用するために無視したい変数がいくつかあります。そして、プロパティから定数値をロードしたいので、次のようにコーディングします。
しかし、 の値MY_VALUE
は常に 0 に設定されます。 @Transient アノテーションを @Value アノテーションと一緒に使用することはできませんか? それとも私は何か他のものを逃しましたか?
java - @PostConstruct メソッドが呼び出される順序を保証することは可能ですか?
依存性注入にSpringを使用しているシステムがあります。注釈ベースの自動配線を使用します。Bean はコンポーネント スキャンによって検出されます。つまり、コンテキスト XML には次のものが含まれます。
私の問題を説明するために、以下のうなずく例を作成しました。
Zoo
オブジェクトのコンテナである がありAnimal
ます。の開発者は、開発中にどのオブジェクトが含まれるZoo
かを知りません。Spring によってインスタンス化された具体的なオブジェクトのセットはコンパイル時に認識されますが、さまざまなビルド プロファイルが存在するため、さまざまな のセットが生成され、これらの状況下でのコードを変更してはなりません。Animal
Zoo
Animal
Animal
Zoo
の目的は、特定の に明示的に依存する必要なく、実行時にZoo
システムの他の部分 (ここでは として示されているZooPatron
) が一連のオブジェクトにアクセスできるようにすることです。Animal
Animal
実際、具象Animal
クラスはすべて、さまざまな Maven アーティファクトによって提供されます。これらの具象を含むさまざまなアーティファクトに依存するだけでプロジェクトのディストリビューションを組み立て、Animal
コンパイル時にすべてを正しく自動配線できるようにしたいと考えています。
Animal
私は、個人が に依存するようにして、 duringZoo
で登録メソッドを呼び出せるようにすることで、この問題を解決しようとしました (失敗しました) 。これにより、 が の明示的なリストに明示的に依存することが回避されます。Zoo
@PostConstruct
Zoo
Animal
このアプローチの問題点は、すべての が登録されているZoo
場合にのみ、顧客が対話を希望することです。コンパイル時に既知の s の有限セットがあり、登録はすべてライフサイクルの Spring ワイヤリング フェーズ中に行われるため、サブスクリプション モデルは不要である必要があります (つまり、実行時にs に s を追加したくありません)。)。Animal
Animal
Animal
Zoo
残念ながら、 のすべての顧客はZoo
単に に依存していますZoo
。これは、Animal
が と持っている関係とまったく同じZoo
です。したがって、 と のメソッド@PostConstruct
は任意の順序で呼び出されます。これは、以下のコード例で示されています。 on が呼び出された時点で、 が登録されていません。数ミリ秒後にすべて登録されます。Animal
ZooPatron
@PostConstruct
ZooPatron
Animal
したがって、ここには 2 種類の依存関係があり、Spring で表現するのに苦労しています。の顧客は、すべてのs が入った後にZoo
のみ使用したいと考えています。Animal
(おそらく「アーク」がより良い例だったでしょう...)
私の質問は基本的に、この問題を解決する最善の方法は何ですか?
出力:
承認された解決策の説明
@PostConstruct
基本的に答えは次のとおりです。いいえ、 Spring の「外部」に移動するか、その動作を変更しない限り、呼び出しの順序を保証することはできません。
ここでの本当の問題は、呼び出しを順序付けしたかったことではなく、依存関係が正しく表現されてい@PostConstruct
ないという単なる兆候でした。
の消費者がZoo
彼に依存し、さらにs にZoo
依存している場合Animal
、すべてが正しく機能します。Zoo
私の間違いは、サブクラスの明示的なリストに依存したくなかったAnimal
ため、この登録方法を導入したことです。回答で指摘されているように、自己登録メカニズムと依存性注入を組み合わせても、不必要な複雑さがなければ機能しません。
答えは、 がのコレクションにZoo
依存していることを宣言し、Spring がオートワイヤリングによってコレクションにデータを入力できるようにすることです。Animal
したがって、コレクション メンバーのハード リストはなく、Spring によって検出されますが、依存関係が正しく表現されているため、@PostConstruct
必要な順序でメソッドが実行されます。
素晴らしい答えをありがとう。
hibernate - org.hibernate.HibernateException: トランザクションがアクティブでない場合、ロードは無効です
ユーザー データのロード中に次のエラーが発生します。
私は AspectJ コンパイル時の織りと春の 3.O を使用しています。および休止状態 3.0
以下は私のコードと構成ファイルです。
構成:
前もって感謝します
java - SpringMVCコントローラーの継承とルーティング
私のSpringMVCWebアプリには、CRUD操作用の汎用RESTfulコントローラーがあります。@RequestMapping
そして、各具象コントローラーは、たとえば、のみを宣言する必要がありました/foo
。/foo
汎用コントローラーは、およびへのすべての要求を処理しまし/foo/{id}
た。
/foo/{date}
しかし、今度は、追加のリクエストパラメータまたはパス変数(例:および)を取得する、もう少し複雑なCRUDコントローラーを作成する必要があり/foo/{id}/{date}
ます。そこで、汎用のCRUDコントローラーを拡張し、fetch(id, date)
との両方を処理するオーバーロードされたメソッドを{id}
記述し{date}
ます。それは問題ではない。
fetch(id)
ただし、基本クラスから派生した実装を「無効にする」必要もあり ます(リソースは/foo/{id}
、でのみ使用可能にする必要があります/foo/{id}/{date}
)。私が思いついた唯一のアイデアは、具象コントローラーでこのメソッドをオーバーライドし、偽のURIにマップして、を返すことnull
です。しかし、これは、無効にするのではなく、偽のリソースURIを公開しているため、かなり醜い汚いハックのように見えます。より良い習慣があるのでしょうか?
何か案は?
。
java - @Cachable アノテーション付きメソッドが結果を EHCache でキャッシュしないのはなぜですか?
Spring には、2 つの異なるサービスを自動配線するインターセプターがあります。どちらのサービスにも@Cacheable
、ehcache-spring-annotations プロジェクトの でタグ付けされたメソッドがありますが、 は異なりcacheNames
ます。
アプリケーションを実行すると、一方の方法では結果に EHCache が正常に使用され、もう一方の方法では使用されません。はOrganisationInfoSericeImpl.getOrgCustomProfile()
正しくキャッシュしますが、 はキャッシュEventServiceImpl.getFolderEvnetsForUser
しません。誰かが理由を教えてもらえますか?
両方のサービスで同じキャッシュを使用しようとしましたが、まだ機能するのは 1 つだけです。ehcache-spring-annotations の DEBUG をオンにすると、起動時に両方のメソッドが登録されます。
[DEBUG] 08:09:01 () 属性を持つ CACHE 推奨メソッド 'getFolderEventsForUser' を追加: CacheableAttributeImpl [cache=[ name = ecomOrders status = STATUS_ALIVE 永遠 = false overflowToDisk = false maxElementsInMemory = 100 maxElementsOnDisk = 0 memoryStoreEvictionPolicy = LRU timeToLiveSeconds = 300 timeToIdleSeconds = 0 diskPersistent = false diskExpiryThreadIntervalSeconds = 120 cacheEventListeners: net.sf.ehcache.statistics.LiveCacheStatisticsWrapper hitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0 ]、cacheKeyGenerator=HashCodeCacheKeyGenerator [includeMethod=true、includeParameterTypes=true、useReflection= false, checkforCycles=false], entryFactory=null, exceptionCache=null, parameterMask=ParameterMask [マスク=[]]] [] com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl.getMethodAttribute(CacheAttributeSourceImpl.java:174)
[DEBUG] 08:09:01 () 属性を持つ CACHE 推奨メソッド 'getOrgCustomProfile' を追加: CacheableAttributeImpl [cache=[ name = orgProfile status = STATUS_ALIVE 永遠 = false overflowToDisk = false maxElementsInMemory = 200 maxElementsOnDisk = 0 memoryStoreEvictionPolicy = LRU timeToLiveSeconds = 86400 timeToIdleSeconds = 0 diskPersistent = false diskExpiryThreadIntervalSeconds = 120 cacheEventListeners: net.sf.ehcache.statistics.LiveCacheStatisticsWrapper hitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0 ]、cacheKeyGenerator=HashCodeCacheKeyGenerator [includeMethod=true、includeParameterTypes=true、useReflection= false, checkforCycles=false], entryFactory=null, exceptionCache=null, parameterMask=ParameterMask [マスク=[]]] [] com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl.getMethodAttribute(CacheAttributeSourceImpl.java:174)
インターセプターが自動配線されたサービスを呼び出すと、そのうちの 1 つだけがキャッシュされます。
[DEBUG] 08:09:19 (UNIQUE_ID) 呼び出し用に生成されたキー '-1668638847278617': ReflectiveMethodInvocation: public abstract no.finntech.base.modules.organisation.support.OrgCustomProfileBean no.finntech.service.organisation.OrganisationInfoService.getOrgCustomProfile(java .lang.String) no.finntech.service.ServiceException をスローします。ターゲットはクラス [no.finntech.service.organisation.impl.OrganisationInfoServiceImpl] [URI: /finn/minfinn/myitems/list、リモート IP: 127.0.0.1、Referer: 、User-Agent: Mozilla/5.0 (Windows NT 6.1 ; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2] com.googlecode.ehcache.annotations.interceptor.EhCacheInterceptor.generateCacheKey(EhCacheInterceptor.java:272)
編集:おそらく、2 つのサービスが異なる Maven モジュールで定義されていることに言及する必要があります。
java - Java Spring 3.0 @NumberFormat アノテーションの使用
私は現在、Web フォームで Java スプリング検証を機能させようとする小さなプロジェクトに取り組んでいます。それは機能しますが、年齢を入力するための入力が1つあり、この注釈を使用して数値形式に変換します.文字を入力すると、フォームが送信されたときに入力ボックスの横に表示されます:
「タイプ java.lang.String のプロパティ値をプロパティ age の必要なタイプ java.lang.Integer に変換できませんでした。ネストされた例外は org.springframework.core.convert.ConversionFailedException です: 値 "dasdf" をタイプ java.lang から変換できません.String を java.lang.Integer 型にします。ネストされた例外は java.lang.IllegalArgumentException です: Dasdf を解析できません"
このメッセージを変更する方法はありますか。簡単だと思いますが、検索しても見つかりません。
これは現在の検証コードです:
乾杯、デビッド
spring-3 - 複数のパラメーターの1つが存在する場合のRequestMapping
@RequestMappingアノテーションを使用しているSpring3コントローラーがあります。params値を使用してURLパラメーターの有無に基づいてルーティングできることは知っていますが、2つのパラメーターのいずれかの存在に基づいてルーティングする方法はありますか?
理想的には、次のようなものがあります。
パラメータエラーまたは問題が存在する場合、errorInAuthenticateにルーティングします。
spring - Spring @Transactional は他のアノテーションでは機能しませんか?
だから私の春の教育は続きます。現在、私はいくつかの注釈とそれらが Spring 3 にもたらすものを学ぼうとしています。そのため、DB に接続し、フォームを介して情報を入力し、レコードなどを表示できるミニ webapp を取得しました。すべて正常に動作します。@Transactional としてマークしたサービス Bean を Spring に自動検出させることにしましたが、そうするとアプリが DB に保存されなくなります。そう:
それは機能します。springcourt-data.xml ファイルに、このクラスの Bean 宣言があります。問題はありません。私がこれを行うとき:
それはもはや機能しません。そして、私は持っています
springcourt-servlet.xml ファイル内。それで、誰かが私が台無しにしていることを教えてもらえますか? このクラスに別の注釈を追加し、xml ファイルから Bean 定義を削除するだけで、DB にデータが保存されなくなります。DB からレコードなどをクエリすることはできますが、明らかに自動検出されたサービス Bean を使用しています。
構成ファイルは次のとおりです。
と:
spring - JSFによるSpringアノテーション
@ManagedBeanの代わりにSpringアノテーション(@Serviceや@Componentなど)を使用して、jsfビューページのEL式でそのBeanを使用できるように、JSFアプリケーションでSpringアノテーションを使用する方法を教えてもらえますか?
まず、それが可能かどうか知りたいのですが?はいの場合、どのように?