簡體   English   中英

在方法之前和之后執行代碼?

[英]Execute code before and after method?

在服務層我有一個看起來像這樣的類:

class MyService {
    public doSomething() {
        TelnetSession session = new TelnetSession();
        session.open("username", "password");
        session.execute("blah");
        session.close();
    }
}

在許多類中,我必須聲明並打開會話,然后在最后關閉它。 我寧願用注釋做點什么,但我不知道從哪里開始。 其他人如何做這樣的事情:

class MyService {
    @TelnetTransaction
    public doSomething() {
        session.execute("blah");
    }
}

其中使用@TelnetTransaction注釋的方法實例化,打開並傳入TelnetSession對象。

謝謝,

詹姆士

之前和之后是面向方面的編程。

Spring處理與方面的事務。 給Spring AOP或AspectJ看一看。

除非你正在做一些有趣的事情,否則你最終會得到一個委托給服務對象的對象,並執行。 兩種類型都沒有理由實現完全相同的接口,並且沒有理由說明它們不應該這樣做。 有很多方法可以達到這個目的:

  • 只需手動完成。 我建議在點擊代碼生成之前總是這樣開始。
  • 使用動態代理。 不幸的是, java.lang.reflect.Proxy要求你添加一個接口。
  • 使用APT(或至少1.6 javac中的注釋處理工具)生成代碼。 Java源代碼比字節碼更容易,但我不知道有任何用於Java源代碼生成的好庫。
  • 手工使用Execute Around成語 - 冗長而笨拙。

正如duffymo所說,AOP是要走的路。 我建議你復印一份

AspectJ在行動中

它由Spring提交者Ramnivas Laddad編寫,它涵蓋了Spring AOP和“真正的”AspectJ,並且可以理解。

對於開發,您應該使用AspectJ Developer Tools for Eclipse或更好的SpringSource Tool Suite (它包含AJDT)。

如果你已經使用Spring AOP將是你最好的選擇。 如果需要運行時注入,則需要使用AspectJ。 我記得讀過Spring不支持那種注射

暫無
暫無

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

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