簡體   English   中英

在執行方法之前使用注釋執行代碼

[英]Execute code using annotations before the method is executed

我想在運行時執行方法之前先運行一些代碼,並希望通過注釋來實現它。 我有一個注釋@SetValues

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface SetValues
{}

我是注釋的新手,有幾個問題

  1. 當此注釋附加到方法時,如何執行一些代碼
  2. 在方法執行之前如何運行與注釋關聯的代碼?

有幾種方法可以完成此操作:

  1. 已經提到過面向方面的編程,這里的AspectJ是一個標准。
  2. 您可以自己編寫一段執行類似操作的代碼。 在這種情況下,您可能希望將具有注釋方法的接口的所有(僅某些?)對象包裝在代理中(請參閱java.lang.reflect.proxy ),該代理在調用方法本身之前執行所需的代碼。 (看看java.lang.reflect.InvocationHandler )。 將其與Method.getDeclaredAnnotations()結合使用,您可能可以構建所需的東西。

但是我不確定您到底想要什么。 名稱“ SetValues”似乎暗示您要更改某些字段的值(並可能在執行該方法后將其還原)。 您必須意識到InvocationHandler只能做很多事情。 例如,它不能也不應該破壞封裝(至少沒有其他任何代碼可以借助反射來完成)。 使用此功能時要考慮的另一點是,當InvocationHandler嘗試更改兩個方法都需要的值時,它可能與此類方法的並發執行發生非常嚴重的交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM