問題タブ [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.

0 投票する
3 に答える
4109 参照

java - @Transient アノテーションで @Value アノテーションを使用できませんか?

休止状態を使用するためのテーブルをマップするクラスがあります。マッピングを定数として使用するために無視したい変数がいくつかあります。そして、プロパティから定数値をロードしたいので、次のようにコーディングします。

しかし、 の値MY_VALUEは常に 0 に設定されます。 @Transient アノテーションを @Value アノテーションと一緒に使用することはできませんか? それとも私は何か他のものを逃しましたか?

0 投票する
5 に答える
17965 参照

java - @PostConstruct メソッドが呼び出される順序を保証することは可能ですか?

依存性注入にSpringを使用しているシステムがあります。注釈ベースの自動配線を使用します。Bean はコンポーネント スキャンによって検出されます。つまり、コンテキスト XML には次のものが含まれます。

私の問題を説明するために、以下のうなずく例を作成しました。

Zooオブジェクトのコンテナである がありAnimalます。の開発者は、開発中にどのオブジェクトが含まれるZooかを知りません。Spring によってインスタンス化された具体的なオブジェクトのセットはコンパイル時に認識されますが、さまざまなビルド プロファイルが存在するため、さまざまな のセットが生成され、これらの状況下でのコードを変更してはなりません。AnimalZooAnimalAnimalZoo

の目的は、特定の に明示的に依存する必要なく、実行時にZooシステムの他の部分 (ここでは として示されているZooPatron) が一連のオブジェクトにアクセスできるようにすることです。AnimalAnimal

実際、具象Animalクラスはすべて、さまざまな Maven アーティファクトによって提供されます。これらの具象を含むさまざまなアーティファクトに依存するだけでプロジェクトのディストリビューションを組み立て、Animalコンパイル時にすべてを正しく自動配線できるようにしたいと考えています。

Animal私は、個人が に依存するようにして、 duringZooで登録メソッドを呼び出せるようにすることで、この問題を解決しようとしました (失敗しました) 。これにより、 が の明示的なリストに明示的に依存することが回避されます。Zoo@PostConstructZooAnimal

このアプローチの問題点は、すべての が登録されているZoo場合にのみ、顧客が対話を希望することです。コンパイル時に既知の s の有限セットがあり、登録はすべてライフサイクルの Spring ワイヤリング フェーズ中に行われるため、サブスクリプション モデルは不要である必要があります (つまり、実行時にs に s を追加したくありません)。)。AnimalAnimalAnimalZoo

残念ながら、 のすべての顧客はZoo単に に依存していますZoo。これは、Animalが と持っている関係とまったく同じZooです。したがって、 と のメソッド@PostConstructは任意の順序で呼び出されます。これは、以下のコード例で示されています。 on が呼び出された時点で、 が登録されていません。数ミリ秒後にすべて登録されます。AnimalZooPatron@PostConstructZooPatronAnimal

したがって、ここには 2 種類の依存関係があり、Spring で表現するのに苦労しています。の顧客は、すべてのs が入った後にZooのみ使用したいと考えています。Animal(おそらく「アーク」がより良い例だったでしょう...)

私の質問は基本的に、この問題を解決する最善の方法は何ですか?

出力:

承認された解決策の説明

@PostConstruct基本的に答えは次のとおりです。いいえ、 Spring の「外部」に移動するか、その動作を変更しない限り、呼び出しの順序を保証することはできません。

ここでの本当の問題は、呼び出しを順序付けしたかったことではなく、依存関係が正しく表現されてい@PostConstructないという単なる兆候でした。

の消費者がZoo彼に依存し、さらにs にZoo依存している場合Animal、すべてが正しく機能します。Zoo私の間違いは、サブクラスの明示的なリストに依存したくなかったAnimalため、この登録方法を導入したことです。回答で指摘されているように、自己登録メカニズムと依存性注入を組み合わせても、不必要な複雑さがなければ機能しません。

答えは、 がのコレクションZoo依存していることを宣言し、Spring がオートワイヤリングによってコレクションにデータを入力できるようにすることです。Animal

したがって、コレクション メンバーのハード リストはなく、Spring によって検出されますが、依存関係が正しく表現されているため、@PostConstruct必要な順序でメソッドが実行されます。

素晴らしい答えをありがとう。

0 投票する
0 に答える
904 参照

hibernate - org.hibernate.HibernateException: トランザクションがアクティブでない場合、ロードは無効です

ユーザー データのロード中に次のエラーが発生します。

私は AspectJ コンパイル時の織りと春の 3.O を使用しています。および休止状態 3.0

以下は私のコードと構成ファイルです。

構成:

前もって感謝します

0 投票する
1 に答える
14136 参照

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を公開しているため、かなり醜い汚いハックのように見えます。より良い習慣があるのでしょうか?

何か案は?

0 投票する
2 に答える
7478 参照

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 モジュールで定義されていることに言及する必要があります。

0 投票する
1 に答える
8070 参照

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 を解析できません"

このメッセージを変更する方法はありますか。簡単だと思いますが、検索しても見つかりません。

これは現在の検証コードです:

乾杯、デビッド

0 投票する
3 に答える
6113 参照

spring-3 - 複数のパラメーターの1つが存在する場合のRequestMapping

@RequestMappingアノテーションを使用しているSpring3コントローラーがあります。params値を使用してURLパラメーターの有無に基づいてルーティングできることは知っていますが、2つのパラメーターのいずれかの存在に基づいてルーティングする方法はありますか?

理想的には、次のようなものがあります。

パラメータエラーまたは問題が存在する場合、errorInAuthenticateにルーティングします。

0 投票する
5 に答える
6076 参照

spring - Spring @Transactional は他のアノテーションでは機能しませんか?

だから私の春の教育は続きます。現在、私はいくつかの注釈とそれらが Spring 3 にもたらすものを学ぼうとしています。そのため、DB に接続し、フォームを介して情報を入力し、レコードなどを表示できるミニ webapp を取得しました。すべて正常に動作します。@Transactional としてマークしたサービス Bean を Spring に自動検出させることにしましたが、そうするとアプリが DB に保存されなくなります。そう:

それは機能します。springcourt-data.xml ファイルに、このクラスの Bean 宣言があります。問題はありません。私がこれを行うとき:

それはもはや機能しません。そして、私は持っています

springcourt-servlet.xml ファイル内。それで、誰かが私が台無しにしていることを教えてもらえますか? このクラスに別の注釈を追加し、xml ファイルから Bean 定義を削除するだけで、DB にデータが保存されなくなります。DB からレコードなどをクエリすることはできますが、明らかに自動検出されたサービス Bean を使用しています。

構成ファイルは次のとおりです。

と:

0 投票する
1 に答える
2226 参照

spring - JSFによるSpringアノテーション

@ManagedBeanの代わりにSpringアノテーション(@Serviceや@Componentなど)を使用して、jsfビューページのEL式でそのBeanを使用できるように、JSFアプリケーションでSpringアノテーションを使用する方法を教えてもらえますか?

まず、それが可能かどうか知りたいのですが?はいの場合、どのように?