问题标签 [cglib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何在 Spring 中注入具有受保护方法的 JDK 代理类?
我有一组相当奇怪的情况。我正在使用带有实现和接口的 bean 的 Spring 3.0.6。到目前为止,很正常的东西。我的 bean 也有一些受保护的方法。我正在使用一些 AOP(JDK 代理)并且一切正常。
当我想将此 bean 注入另一个包类时,我的问题就出现了。在正常情况下,我将能够注入实现并访问受保护的方法。不幸的是,由于是JDK代理,我只能基于接口注入。
由于我需要访问受保护的方法,我无法在接口中声明这些方法,所以我有点处于 catch-22 的情况。我尝试切换到 CGLIB 代理,但它们与其他顾问一起使用最终方法等建议 bean 时崩溃,因此这并不是真正的解决方案。
关于我能做什么的任何建议?我尝试使用 @PostConstruct 方法从应用程序上下文中检索 bean,但是(并不奇怪)它也只能检索 Proxied bean,因此无法将其转换为所需的实现。
任何建议,将不胜感激。
谢谢!
埃里克
java - 如何在 Spring 配置文件中混合 CGLIB 和 JDK 代理?
该线程与我在这里遇到的一个问题有关,即需要访问建议类的受保护方法。我正在使用 Spring 3.0.6,并创建了一个 Spring 分析方面,我将其应用于使用 JDK 代理的大量 bean。
但是,由于需要访问一个特定 bean 中的受保护方法,我想建议它使用 CGLIB。我想继续使用 JDK 代理的所有其他 bean。
我混合使用了注释和 xml 配置,但这个特定方面是在 XML 配置中定义的。
我知道有<aop:scoped-proxy>
标签,但据我所知,这适用于所有方面。
无论如何定义一个方面来使用CGLIB吗?
我试图将配置分成两部分,一个配置指定target-class="true"
另一个target-class="false"
,但它似乎在那时将 CGLIB 应用于所有配置。
有没有办法做到这一点?
谢谢,
埃里克
java - Spring Framework 在 JBoss 上看不到 cglib
我的应用程序在 JBoss 5.1.0.GA 上使用 Spring Framework 3.0.5。框架由服务器提供,即框架库放在server/<servername>/lib
目录下。该服务器由第三方管理,因此我无法将任何库添加到该服务器提供的环境中。在我的应用程序中必须使用 cglib。Spring 将其用于代理目的。cglib 不在 中server/<servername>/lib
,因此我使用 maven将其包含cglib-2.2.2.jar
在我的应用程序中。.war
问题是部署时出现以下错误:
无法代理目标类,因为 CGLIB2 不可用。将 CGLIB 添加到类路径或指定代理接口。
我检查了我的应用程序.war
的 cglib 并在WEB-INF/lib
目录中找到了它。AFAIK 位于此目录中的 jar 中的所有类都在类路径中,以及 .jar 中的类server/<servername>/lib
。为什么Spring找不到cglib?
proxy - cglib 是否在内存字节码或物理类中创建用于实现代理?
CGLIB 是非常流行的实现,用于实现代理机制。我很想知道,要代理一个特定的类,CGLIB 会创建其子类的内存实现,还是创建物理字节码然后实例化该类?
如果它在内存实现中创建,那么这样做会带来多少开销。我试图在 CGLIB 文档中找到此详细信息,但它没有指定或可能已被我跳过。
对于 javaassist 库,可能会问同样的问题。
spring - 超类没有空构造函数,但没有给出参数。弹簧集成
我正在开发 Spring Integration 支持的 Web 应用程序。我正在使用 1.0.4.RELEASE。我使用 CGLib 代理。我有一个事务性消息端点。一切正常,但我尝试了一些注释。我使用注释配置,效果很好。我开始将我的服务激活器配置从 xml 切换到注释,但它失败了。
以下配置正常工作:
弹簧集成.xml
我的服务.java
尝试使用注释实现完全相同的功能(记住我使用 CGLIB,所以我不需要接口,但需要默认构造函数)我
- 从我的 .xml 中删除服务激活器
- 更改了我的服务:
更改了 MyService.java
我收到以下错误: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
我看到很多线程描述了以下错误文章,但问题是关于自定义类。我的问题与 Spring 课程有关。
怎么了?为什么 Spring 尝试为 Spring 类创建代理,而不仅仅是为 MyService 创建代理?我的课以某种方式包装了吗?我不明白发生了什么。非常感谢帮助。
hibernate - asm 和 hibernate 以及 cglib 的兼容性问题...?
我正在获取 glassfish 服务器日志:,
我正在使用netbeans。最近三天我很沮丧。
请帮助如何消除此错误..?
proxy - 带弹簧的 CGLIB 抛出 IllegalAccessError
我有一个启用了 aop 的 spring 应用程序,使用 cglib 代理进行日志记录:
我正在使用 cglib-nodep-2.2.2.jar 和 spring 3.1.1 这在 tomcat 或 jetty 中效果很好。但是,当我在 OC4J(使用 jdk1.6)上部署它时,我收到以下错误: 尝试代理的类 - ComponentRegistryImpl 是包私有的
java - 向 Java 类添加字段
研究了在运行时使用 CGLib、ASM、BCEL(方面)和 Javassist 向类添加字段....
只是为了让我直截了当,看起来这些字节码操纵器不会更新实际的类,而是允许用户只转储修改(如使用 CGLib 和 writeFile 方法)。希望我能找到一个解决方案,(a)加载类(而不是使用 BCEL 执行 InputStream)和(b)更新类。
也许这很正常?人们通常会创建代理并传递代理吗?
我想要做的是在将对象传递给查找具有特定注释的字段(而不是属性)的框架之前添加一个字段(注意:不是通过 get/set 方法的属性)。所以“客户”正在创建我想要注入额外字段的目标类。使用 AOP 拦截对我想要操作这些对象的服务层的调用。