java – spring和aspectj,非代理对象的拦截方法

我想拦截来自非代理对象的方法.

我有一个类实例MyClass myClassInstance = new MyClass(),我想拦截myClassInstance方法的调用.

我知道所有代理工作都很好,但我需要非代理的方面.

这可能吗?

谢谢.

解决方法:

这是可能的,但这是不可取的.

您可以使用@Configurable和AspectJ来拦截调用.阅读the 7.8.1 Using AspectJ to dependency inject domain objects with Spring section of the docs.

简而言之 – AspectJ插入一些“魔法”编译时或加载时(使用相应的编织器),它修改类以使它们成为弹簧上下文的一部分.

至于为什么我认为这是不可取的 – 这是通过修改类的结构而发生的黑暗魔法.这不是面向对象的方法,我认为很难支持.想象一下,6个月后,你的一位同事正在调试一个讨厌的问题.可能需要几天才能意识到这种魔法正在发生.这个意见虽然有所体现.功能就在那里,如果你需要它 – 使用它.

上一篇:java – 为什么@AfterReturning只在@AfterThrowing异常后执行?


下一篇:AspectJ的注解开发AOP:切点定义