2011-10-02 23 views
1

メソッドにアノテーションがある場合のみ、AOPを使用して電子メールを送信します。しかし、アノテーションを使用してオブジェクトの値を取得するにはどうすればよいですか?たとえば、次の方法があります。 AOPを使用すると、placeOrderが呼び出されたときを追跡できます。しかし、注文番号、ユーザーの電子メールアドレス、AOPコードから注文された品目はどうすれば入手できますか?javaはアノテーションとアノテーションを使用して電子メールを送信します

@SendEmail() 
public void placeOrder(){ 
    //ordernumber 
    //user email address 
    //items ordered 
} 

アノテーションにオブジェクトを含めることは可能であり、メソッドはオブジェクトを設定できますか?注釈の例

@SendEmail(order=<order instance>, user=<user instance>, items=<list of item instance>) 
public void placeOrder(){ 
    Order order; 
    User user; 
    List<Item> items; 
} 
+1

まあ、それは@SendMail annotation.Takeの実装でRequestForEnhancementの例を見に依存しこの[リンク](http://download.oracle.com/javase/1.5.0/docs/guide/language/annotations.html)。 @SendMailの詳細を追加できますか? – CoolBeans

+0

はい、詳細を追加できます。私はリンクを見ましたが、すべての値は文字列です。インスタンスの他のメンバとインスタンス変数にアクセスしたい、あるいは何らかの形で必要な値をアノテーションに渡したいと思いますが、それを行う方法があるかどうかはわかりません – user373201

答えて

0

のためだけのプリミティブを使用することができ、文字列、前述の種類のクラス、列挙、注釈、および配列。 AOPアドバイスを使用して同じ動作を得ることができます。このメソッドの戻り値は、このアドバイスを起動したときにplaceOrderメソッドが呼び出される

@Aspect 
public class AOPSampleAdvice { 
..... 
    @AfterReturning("execution(* *..YorServiceInterface.placeOrder(..))") 
    public void afterReturning(JoinPoint joinPoint) { 
       /*Use this if the order is passed in the method signature*/ 
     //Object[] args = joinPoint.getArgs(); 
     //Order order = (Order) args[0]; 
       /**/ 
     Object target = joinPoint.getTarget(); 
       List<Item> items = ((YorServiceInterface) target).getItems(); 
     User user = ((YorServiceInterface) target).getUser(); 
       //Your business 
    } 

たび:あなたはメソッドが引数をオブジェクトへのアクセスやアドバイスターゲットを得ることがしたい場合は、このような顧問を書くことができます。あなたは使用することができます。

@Before 
@AfterReturning 
@AfterThrowing 
@After (finally) 
@Around 

この書き込みあなたのapplicationContext.xmlをして、このアドバイスを登録するには:

<!-- enable aop --> 
<aop:aspectj-autoproxy/> 

<bean id="adviseAspect" class="com.foo.acme.AOPSampleAdvice"/> 
関連する問題