私はカスタムアノテーションを持っている:Springのカスタム注釈に基づくメソッド呼び出し?
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
EventType[] events() default EventType.MESSAGE;
}
、以下のようにそれらを使用して、クラスBのメソッドがあります
今@Controller(events = {EventType.MESSAGE, EventType.DIRECT_MESSAGE})
public void onMessage(Message msg) { }
@Controller(events = {EventType.STAR_ADDED})
public void onStarAdded(Message msg) { }
を、私は、アノテーションに基づいて上記の方法を呼び出したいevents
別のクラスからの値A。言い換えれば、クラスがタイプSTAR_ADDED
のイベントを受け取ったとき、クラスBのすべてのメソッドを、@Controller(events = {EventType.STAR_ADDED})
というアノテーションで呼び出したいとします。
私はJavaでこれを行う方法を知っていますが、スプリングはこれを行うためのAPIを提供していますか?はいの場合は、コードスニペットも役立ちます。
はい、あなたの最初の方法は良いですが、私はクラスBのメソッド名を制御できません。あなたはスプリングフレームワークで見つかった '@ Controller'アノテーションのようなものを作成したいと思うかもしれません。だから私の最初の方法は、私が望んでいないそれぞれのイベントの種類ごとに別々のメソッドを持つ必要があります。第2に、2つの異なるイベントで同じアクションが実行されると、コードが繰り返されます。 –
私は、反射(2番目のコードのサンプル)が選択の武器かもしれない参照してください! – alexbt
または、おそらくAroundInvoke/aspectJここにリンクがあります(私の答えは例を編集しています):http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html – alexbt