Javassist.主要思想是什么,实际用途在哪里?
我知道Javassist是一个Java库,它提供了一种操作应用程序Java字节码的方法。
好吧,但是为什么我们需要操作字节码呢?
有什么真实的例子吗?任何真正的应用程序,javassist使用的地方?
我知道Javassist是一个Java库,它提供了一种操作应用程序Java字节码的方法。
好吧,但是为什么我们需要操作字节码呢?
有什么真实的例子吗?任何真正的应用程序,javassist使用的地方?
一个常见的应用程序是在运行时生成代理类,即在运行时创建一个拦截所有方法调用的子类。例子:
Hibernate使用代理来拦截实体上的方法调用以实现延迟加载,即在首次访问对象时从数据库中提取对象。
Spring框架使用代理来实现其AOP支持,其中包括对声明性事务的支持。它还使用代理来强制执行正确的范围。
EJB 使用代理来实现容器管理的事务、授权检查和应用用户定义的拦截器。
CDI 实现还必须代理托管 Bean 以确保正确的作用域。我怀疑他们也使用字节代码工程库。
我最近使用Javassist为方法返回值实现透明缓存,通过拦截所有方法调用,并且仅在第一次调用时委托给超级实现。
请注意,可以在运行时生成代理类,但只能实现接口,而不能扩展类。上述所有用例都需要类的代理。java.lang.reflect.Proxy