java使用注解和aop发送电子邮件

标签 java annotations aop

我想仅在方法中有注释时才使用 Spring AOP 发送电子邮件。但是如何使用注释获取对象中的值。例如,我有以下方法。通过使用 AOP,我可以跟踪 placeOrder 何时被调用。但是我如何获取订单号、用户电子邮件地址和从 AOP 代码订购的商品。

@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;
}

最佳答案

在注释中,您只能使用原语、字符串、类、枚举、注释和上述类型的数组。您可以使用 AOP 建议获得相同的行为。如果您想访问方法对象 args 或获取建议目标,您可以编写如下顾问:

@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
    }

每次调用 placeOrder 方法时,该方法都会返回启动此建议。您可以使用:

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

要在 applicationContext.xml 中注册此建议,请编写以下内容:

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

<bean id="adviseAspect" class="com.foo.acme.AOPSampleAdvice"/>

关于java使用注解和aop发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629755/

相关文章:

java - 如何在暂停时重新启动整个应用程序?

java - 使用 @NonNullByDefault 和数组时如何删除 'nullness annotation is redundant' 警告? (Eclipse、空注释)

git - 如何在 Sublime Text 编辑器中显示 git 作者姓名?

java - Aspectj 切入点表达式不适用于单个类中的一种方法,但适用于另一种方法

c# - 使用 postsharp 在类中调用替代方法

java - 如何阻止 GMail 将电子邮件中的嵌入图像显示为附件?

java - 如何在非 Android Gradle Java 应用程序中使用 Dagger?

java - 编码性 : Condition in comfort

jquery - 突出显示多行文本

java - Scala:围绕建议或 Python 装饰器实现 Java 的 AspectJ