如何实现AOP以更改Java界面内容?

Nap*_*Nap 1 java aop

我目前在一个项目中使用Seasar2 Framework.该框架在日本非常受欢迎,但我在查找英文文档时遇到了问题.即使在他们的官方英文翻译网站上,他们也只是讨论该框架使用依赖注入和AOP.

我对他们在S2Dao组件中使用它的方式很感兴趣.基本上你只需要自动创建接口DAO类和框架,在运行时更改代码并创建在中间调用的中间类.因此,DB事务代码会自动添加到类中.我在想,有没有一步一步解释如何做到这一点?java可以在运行时更改代码并在运行时更改方法吗?

如何做到这一点是很好的参考?我只是想知道框架是如何做到这一点的.

Mr.*_*art 5

是的,可以在运行时动态实现接口,也可以操作编译的字节码.

Java提供了一种在运行时实现接口的内置机制,称为动态代理类.

还有像cglibjavassist这样的好库,它们不仅允许您实现接口,还允许在运行时扩展类和操作字节码(例如,改变方法的行为).像Spring和Hibernate 这样的框架使用像这样的库来制造它们的魔力,所以你的框架也可能正在使用它们中的一些.

注意:如果您感到好奇,这些库可以"调整"字节码,因为它们不是使用JVM的默认ClassLoader,而是使用自己的ClassLoader加载类,因此它们可以完全控制加载类的每个字节,并且他们可以随心所欲地做任何事:).