具体类的动态代理

eli*_*ocs 16 java reflection dynamic-proxy

我想在Java程序中定义一个方法拦截器,换句话说我希望在每个方法调用中执行一个行为.此应用程序不在应用程序服务器中执行,因此我无法使用EJB调用拦截器.我在标准Java库中找到了一个很好的Proxy API,但它有限,因为它需要在代理创建中使用一个接口:

 Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                      new Class[] { Foo.class },
                                      handler);
Run Code Online (Sandbox Code Playgroud)

是否有类似的API不强制将Foo.class声明为接口?

Bri*_*new 7

为什么不使用CGLIB?有关更多信息,请参阅此文章.

如果要代理没有接口的旧类,该怎么办?您可以使用CGLIB.CGLIB是一个功能强大的高性能代码生成库.在封面下,它使用ASM(一个小而快速的字节码操作框架)来转换现有的字节代码以生成新的类.CGLIB比JDK动态代理方法更快.本质上,它动态生成一个子类来覆盖代理类的非final方法,并连接回调用户定义的拦截器的钩子.