Java spring和aspectj,非代理对象的截取方法

Java spring和aspectj,非代理对象的截取方法,java,spring,proxy,aspectj,Java,Spring,Proxy,Aspectj,我想从非代理对象截取方法 我有一个类实例MyClass myClassInstance=new MyClass(),我想拦截myClassInstance方法的调用 我知道所有的代理都很好,但我需要非代理的方面 这可能吗 谢谢。这是可能的,但并不可取 您可以使用@Configurable,AspectJ将拦截调用。读一读 简而言之,AspectJ在编译时或加载时(使用相应的weaver)插入了一些“魔法”,修改类,使它们成为spring上下文的一部分 至于为什么我认为这是不可取的——这是通过修改

我想从非代理对象截取方法

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

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

这可能吗


谢谢。

这是可能的,但并不可取

您可以使用
@Configurable
,AspectJ将拦截调用。读一读

简而言之,AspectJ在编译时或加载时(使用相应的weaver)插入了一些“魔法”,修改类,使它们成为spring上下文的一部分


至于为什么我认为这是不可取的——这是通过修改类的结构而产生的黑暗魔法。这不是一种面向对象的方法,我认为这将很难得到支持。想象一下6个月后,你的一位同事正在调试一个棘手的问题。他可能需要几天才能意识到这种神奇的事情正在发生。但这种观点是服从的。功能就在那里,如果您需要,就使用它。

使用Spring,我不这么认为(),使用AspectJ,我相信只要您愿意,您就可以。但是我从未尝试过。

您可以在春季启用加载时编织。然后,类装入器将在装入类时将您定义的任何方面编织到类中,而不管它们是否由Spring创建

您需要通过将此行添加到上下文文件来启用LTW:

见:

@Bozho:我用@Configurable注释MyClass,但没有截获任何内容。@你必须再添加一些配置。就像我说的,阅读文档中的部分。据我回忆,您需要aspectj编译器或aspectj JVMagent@Bozho:好的,我现在读了你的编辑,所以我认为这不是我的解决方案。我想截获实体方法的调用,以管理会话以加载惰性集合。我认为这不是正确的解决方案。哦,最好围绕服务层(或dao层)来做。好吧,这已经超出了当前问题的范围。我可以问另一个问题,提供更多细节。我将Spring3.0与aspectJ编译时编织结合使用,效果很好。比代理方法好得多。