gpt4 book ai didi

java - 使用 Spring 或 AspectJ 将基于代码的样式转换为基于注释的 AOP

转载 作者:行者123 更新时间:2023-12-01 09:58:45 24 4
gpt4 key购买 nike

我有以下基于代码的样式方面,它在代码中查找字段级注释并调用以该字段作为参数的方法。这就是它的样子..

public aspect EncryptFieldAspect
{
pointcut encryptStringMethod(Object o, String inString):
call(@Encrypt * *(String))
&& target(o)
&& args(inString)
&& !within(EncryptFieldAspect);

void around(Object o, String inString) : encryptStringMethod(o, inString) {
proceed(o, FakeEncrypt.Encrypt(inString));
return;
}
}

上面的方法工作正常,但我想将其转换为基于 Spring 或 AspectJ 的注释,与此类似。发现 AspectJ 文档有点困惑任何提示都会有帮助..

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class MyAspect {

@Around("execution(public * *(..))")
public Object allMethods(final ProceedingJoinPoint thisJoinPoint) throws Throwable {
System.out.println("Before...");
try{
return thisJoinPoint.proceed();
}finally{
System.out.println("After...");
}
}
}

最佳答案

不确定您正在阅读哪些文档 - https://eclipse.org/aspectj/doc/next/adk15notebook/ataspectj-pcadvice.html 的页面向您展示如何从代码转换为注释样式。我承认它们并没有想象的那么全面。

基本上:

  • 从aspect关键字切换到@Aspect
  • 将切入点移动到方法上指定的字符串 @Pointcut 注释
  • 将您的建议从未命名的 block 转换为方法。 (由于需要继续进行的参数,这对于周围的建议来说可能会变得棘手)

你原来的样子是这样的:

@Aspect
public class EncryptFieldAspect
{
@Pointcut("call(@need.to.fully.qualify.Encrypt * *(java.lang.String)) && target(o) && args(inString) && !within(need.to.fully.qualify.EncryptFieldAspect)");
void encryptStringMethod(Object o, String inString) {}

@Around("encryptStringMethod(o,inString)")
void myAdvice(Object o, String inString, ProceedingJoinPoint thisJoinPoint) {
thisJoinPoint.proceed(new Object[]{o, FakeEncrypt.Encrypt(inString)});
}
}

关于java - 使用 Spring 或 AspectJ 将基于代码的样式转换为基于注释的 AOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com