我有一个带有许多方法的服务接口,所有这些方法都接受一个Request对象并返回一个Response对象.所有请求对象都有一个共同的祖先,所有响应对象都有一个不同的共同祖先(它有一个成功标志和一个消息字段).
现在,我希望有一个检查权限等的方面,执行服务调用并返回带有失败代码的Response对象(如果有任何失败).问题是:我需要知道要创建什么类型的Response对象.是否有切入点表达式,使我可以访问返回类型?也许是这样的事情?
@Around(value = "execution(public *"
+ " com.mycompany.MyService+.*(..))"
+ " && args(request)"
+ " && returning( returnType)" // something like this would be nice
, argNames = "request,returnType")
public Object handleServiceCall(final ProceedingJoinPoint pjp,
final Request request,
final Class<? extends Response> returnType){ ... }
Run Code Online (Sandbox Code Playgroud) 我有一个自定义注释,我用它在我的控制器中注释了一个方法以及一个 @ReqestMapping。
目标是使用 HandlerInterceptor 的自定义注释中设置的值来执行任务。
我映射了拦截器 (HandlerInterceptorAdaptor) 并执行。如果我在具体的拦截器中设置断点,我可以检查 HttpServletRequest、HttpServletResponse 和处理程序对象。但是,我看不到如何 1,获取请求尝试访问的方法 2,获取该方法的注释,当然 3,获取注释设置的值。
任何人都可以指出我对此的良好文档吗?
谢谢,麻烦您了。
我有这个界面:
public interface FakeTemplate {
@CustomAnnotation
void foo() {
}
}
Run Code Online (Sandbox Code Playgroud)
以及该接口的实现:
@Component
public FakeImpl implements FakeTemplate {
@Override
public void foo() {
//Do Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
还有这方面:
@Aspect
@Component
public class CustomAspect {
@Before(value = "@annotation(com.fake.CustomAnnotation)")
public void doStuffBefore(JoinPoint joinPoint} {
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用启用了 AspectJ 的 spring,使用:@EnableAspectJAutoProxy(proxyTargetClass = true)
我的问题是doStuffBefore在执行 FakeImpl 的方法之前没有调用方面方法foo()。@CustomAnnotation当我把onFakeImpl而不是 时,它确实可以工作FakeTemplate,但我更喜欢把注释放在 on 上FakeTemplate,因为它位于单独的 API 包中,并且我将它委托为放置所有注释的地方。
我还想确保CustomAnnotation在每个实现的类上调用 ,FakeTemplate而无需记住在所有实现类本身上添加注释。
如果注释仅在接口类上,有什么方法可以获取要调用的建议吗?