我有一些构造我真的很想在上面使用一个方面。我想让我的RestController从一个类继承,这个类产生特殊的日志记录方法
我创建了一个注释,用它来标记我想要呈现的方法,这样切入点就不能过滤它了。特殊情况是此方法是在RestController的父类中声明的。
请查看我的代码并检查我可能错过了什么以使其工作。
ApplicationClass
@SpringBootApplication
@ComponentScan("com.xetra.experimental")
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class AopTryoutApplication {
public static void main(String[] args) {
SpringApplication.run(AopTryoutApplication.class, args);
}
}
RESTController
@RestController
public class Endpoint extends SimpleLogger {
@GetMapping("/endpoint")
public void doStuff(){
log("foo");
}
}
public class SimpleLogger implements EndpointLogger{
@AspectAnnotation
public void log(String msg) {
System.out.println(msg);
}
}
public interface EndpointLogger {
void log(String msg);
}
注释我的方面应该切入点到
@Inherited
public @interface AspectAnnotation {
}
Spring AOP方面
@Component
@Aspect
public class TestAspect {
@Pointcut("@annotation(com.xetra.experimental.aoptryout.AspectAnnotation)")
public void methods() {
}
@Before("methods()")
public void beforeMethodExecution(JoinPoint jp) {
System.out.println("Aspect ran!!!!");
}
}
由于Spring的AOP框架基于代理的特性,目标对象内的调用根据定义是不被拦截的。
你可以在这里找到更多。
对log
方法的调用不会被拦截,因为它是从属于同一目标对象的dostuff
方法发出的。
是的,你是对的!
有什么办法能让这一切顺利吗?比如使用AspectJ而不是Spring AOP?
您可以使用AspectJ的源代码编织使其工作。这里是一个工作示例。
AnyLogic提供基于时间触发的传统交通灯。我正在创建一个新的道路交通管理系统,我想根据四条道路中最大的车辆密度触发交通灯。是否有任何功能或元素可以帮助我这样做?
我对Android系统比较陌生,所以我在这里很困惑... NotificationReceiver.java manifest.xml
如何指定用户点击通知包时要使用的意图?
我有以下控制器: 我只找到了与mvc配置相关的部分:
为什么我的子类方法不重写其父类中相同签名的方法? 我有一个类,它扩展了一个抽象类,后者扩展了抽象类Actor(这里的上下文是一个pong游戏)。和都有一个具有相同签名的方法: 目的是让方法重写的方法。这里的问题是,当我在内部调用时,只调用的方法。 在中的上设置的断点会脱扣,而在中的上设置的断点从不脱扣。我还在方法上尝试了,但它仍然调用方法。 目标是让对象以与其他对象不同的速度上下移动。因此方法也会
我试图在我的应用程序中实现FCM,但我有一个问题。每当我发送通知时,它只显示默认通知,而不是调用自定义代码。我做错了什么? 这些是服务: