我想拦截来自非代理对象的方法。
我有一个类实例MyClass myClassInstance=new MyClass()
,我想拦截myClassInstance
方法的调用。
我知道所有代理都很好用,但我需要非代理的方面。
这可能吗?
感谢。
答案 0 :(得分:5)
这是可能的,但这是不可取的。
您可以使用@Configurable
,AspectJ将拦截来电。请阅读the 7.8.1 Using AspectJ to dependency inject domain objects with Spring section of the docs。
简而言之 - AspectJ在编译时或加载时(使用相应的编织器)插入一些“魔法”,它会修改类,使它们成为弹簧上下文的一部分。
至于为什么我认为这是不可取的 - 这是通过修改类的结构而发生的黑暗魔法。这不是面向对象的方法,我认为很难支持。想象一下,6个月后,你的一位同事正在调试一个讨厌的问题。可能需要几天才能意识到这种魔法正在发生。这个意见虽然有所体现。功能就在那里,如果你需要它 - 使用它。
答案 1 :(得分:1)
使用Spring,我不相信(I appear to be wrong),使用AspectJ我相信只要你compile all the code with the AspectJ compiler就可以。但是我从未尝试过。
答案 2 :(得分:0)
您可以在Spring中启用加载时编织。然后,类加载器将在加载时将您定义的任何方面编织到类中 - 无论它们是否由Spring创建。
您需要通过将此行添加到上下文文件来启用LTW: