问题标签 [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.
spring - 如何让 Spring 控制器、AOP 和 JDK 代理一起工作
在我的带有方面注释的 spring 控制器中,我试图删除 CGLib 代理并用 JDK 动态代理替换它们。我知道当类没有实现接口时 Spring AOP 使用 CGLib,因为 JDK 动态代理只在接口上工作。我还意识到,接口和实现类上都需要有注解。但是,我遇到的问题是控制器不再显示为带有 JDK 代理的 bean。
我的控制器 bean 像这样被扫描:
这可行,但控制器显示为 CGLibController$$EnhancerByCGLIB$$5f0b2287:
这不起作用,它永远不会到达 bean 后处理器:
但是,如果我明确地创建这个 DynamicController bean,如
然后当我启动我的服务器时 ServletContext 抱怨说
bean初始化失败;嵌套异常是 java.lang.IllegalStateException:无法将处理程序“dynamicController”映射到 URL 路径 [some_url]:已经映射了类型为 [class $Proxy61] 的处理程序。
所以这里发生了一些事情,DynamicController 是一个动态代理。但我不知道还发生了什么,我知道它不再是一个 bean/控制器。我不想要“控制器、方面、动态代理:选择任何两个”我想要全部三个。这有可能吗?
java - 为什么 cglib 调用 MethodInterceptor 回调失败?
在下面显示的 unittest 类中,一个测试失败,另一个测试成功。这两个测试都创建了一个CGLIB
带有拦截器模拟的对象,并尝试验证拦截器是否与之交互。测试在使用 CGLIB 动态子类化的类上有所不同。成功的测试子类化一个普通的 Java 接口;失败的子类是一个动态子类(使用创建Mockito
)。为什么第一次测试失败了?
谢谢。
更新:
失败的堆栈跟踪
此外,关于 Mockito 模拟是否是 CGLIB 增强类,下面的测试(失败)似乎表明它不是:
java - 如何使用 Cglib 通过读取 XML 配置在运行时更新类的字段?
考虑到我们项目的通用性和灵活性,我们需要将字段和相关的 get/set 方法添加到具有XML
配置文件中的列数组的基本类中。我正在考虑 Cglib 并对其进行了研究。
我了解到如何使用 Cglib 在应用程序中实现 AOP 功能,如下所示:
互联网上学习和研究 Cglib 的资源不足。我想从这里得到帮助。以下是我的详细问题。
1,我有一个基本的 POJO 类BasicUser
,它最初是空的。
2、应用程序应该能够从 中读取包含名称、数据类型、长度等信息的字段列表,project.xml
并将这些字段添加到 BasicUser 类中,然后应用程序使用更新的新类Cglib
来满足业务需求。
我曾经想过使用 Map 来实现它,但它不是技术性的。哪位专业人士可以给我指导一下。
maven - Maven Central 中的 CGLIB 3
所以,CGLIB 3 已经发布了几个月,看起来 Spring 3.2现在也在使用它——但不确定为什么它不在 Maven Central 上。
是否存在另一个存在此依赖关系的 Maven 存储库?
java - 使用基于 Java 的配置进行 Spring 3.2 单元测试
我正在使用带有基于 Java 的配置的 Spring 3.2,并且我的单元测试(JUnit 4.8.1)存在一些问题。所以这是一个测试运行器:
但是,我收到此错误:
正如Spring 博客所述,Spring 3.2 正在内联 CGLIB 3。那么为什么我会收到此错误?
我使用 Gradle 1.3 作为构建管理工具,使用 STS 作为 IDE。调用gradle eclipse
gradle 时会两次引入依赖项:一次作为普通 jar,一次作为库:
首先是普通的罐子:
而不是作为图书馆:
在普通的 jar 部分我仍然配置了 Spring 3.1,而在库部分有 Spring 3.2。所以我移除了普通的罐子,一切正常。
这是我的项目 build.gradle
以及来自主项目的 build.gradle
spring - Spring 3.1 无法加载配置类:
我正在开发带有 Spring 3.1.0 的 Rest Service 的项目。发布。我正在使用 Config 类来加载 bean。正如建议的那样,使用 cglib 2.2 和 asm-3.3 jars。
这在 websphere 8.5 中失败,但有以下异常。但适用于 Apache Tomcat 7.0。
有关如何解决此问题的任何建议。
尝试使用不同版本的 cglib 和 asm jar,但没有运气..
spring - 在 Spring aop + cglib 中配置代理 bean
我们有一个使用 spring-aop 和 cglib 库的 Spring 3.1 Web 应用程序。春天.xml:
这意味着将使用 cglib 为每个 bean 创建一个代理。
现在我们需要使用带有 com.mchange.v2.c3p0.ComboPooledDataSource 的 db 连接池 bean:
问题是 ComboPooledDataSource 类被标记为 final。而且 cglib 不能代理 final 类。
如何标记“connectionPool”bean 不被代理?
java - 如何在运行时实现参数化接口?
我已经检查了 Java 代理和 cglib,但我还没有找到任何关于我将如何开始这个项目的示例。
这是我需要做的。
我有一个界面:
我有一堆不同类型的城市作为一个名为的类的内部类Cities
我希望能够通过循环遍历类的不同内部类来在运行时实现接口,Cities
如下所示:
除了类型参数需要是 clazz 类型(在 for 循环中)之外,所有实现都是相同的。
这甚至可能吗?如果是这样,我应该从哪里开始。Java 代理和 cglib 谈论了很多方法拦截,但这并不是我真正想要做的。
谢谢
java - 对 Cglib MethodInterceptor 调用方法感到困惑
正如文档描述的那样,我对 Cglib MethodInterceptor 有一些困惑:所有生成的代理方法都调用此方法而不是原始方法。原始方法可以使用 Method 对象通过正常反射调用,也可以使用 MethodProxy(更快)调用。
但是下面的代码有 java.lang.reflect.InvocationTargetException 引起的错误;为什么?任何建议将不胜感激。
}
java - 简单选择上的 lambdaJ 和 ClassCastException
我的想法用完了,谷歌也没有帮助。用例似乎微不足道,但因 ClassCastException 而失败。我不知道我做错了什么。有一个简单的方法可以返回匹配给定类别的第一个元素,看看。
执行给出了堆栈的顶部:
我在使用 lambdaJ 对 hibernate 的持久集合进行操作时遇到了同样的问题。我放弃了假设已经是代理的代理对象(集合中的实体)可能存在一些问题。看来我错了,因为类别和所有继承的类都是作为结果转换器传递给休眠的 pojos。
这种行为的原因可能是什么?你有什么主意吗?
(我使用的是最新的 lambdaj-2.4)。
添加以满足马里奥的要求
代码是一个简单的枚举。类别是不同类别的基类,它有代码字段。此外,它是公共静态类,与所有继承类相同(如果重要的话)。
我将尝试提供失败的测试。
再次编辑以提供更多信息。 我的一个朋友查看了代码,并对这个问题提出了新的看法。
我将尝试从一开始就重现我们的演绎路径。
// 给定
有一个应用程序分为两部分,第一个基础应用程序(保存模型文件)和 Web 应用程序(保存 UI 连接文件,如 backing beans 等)。 我们的类别和代码是模型类,因此位于基础应用程序中。然后我们有一个支持 bean 服务于一些 web 逻辑,特别是 bean 或其合作者调用我们的 select。
// 什么时候
我们正在将应用程序部署到 Web 服务器!就我而言,JBoss。类由加载器读取,一些我不知道的非常复杂的事情发生了,所有这些都是为了让我的应用程序运行。我做了一些网络操作,然后调用了支持 bean 的方法
从应用程序的 Web 部分。
魔法来了。我们的 Category.class 和 Code.class 由 UnifiedClassLoader 在应用程序加载时加载。我们在on(Category.class)方法中,并且将构建 Category 的代理。一些真正纠结的逻辑被用来做到这一点,最重要的是,代理是用
方法,但 Callback.class 取自该类加载器
因此,最初加载该类 UnifiedClassLoader 的是一个类加载器。干净地完成所有这些之后,我们终于打电话给
使用反射浏览代理类寻找: Proxy.getDeclaredMethod("setThreadsCallbacks", new Class[]{ Callback[].class });
我忽略了事实,我不明白
在我们的例子中重要的是 Callback.class 不是由 UnifiedClassLoader 提供的。应用程序在网络轮胎中执行,因此对 Callback.class 的调用将通过网络应用程序进行服务器。类加载器和返回的 Callback.class 将与之前作为提到的setThreadsCallbacks函数的参数放置的内容不同。反思残酷地失败了。
这就是为什么我无法提供失败的测试。(相同的类加载器)。
我怀疑这种情况有什么解决方案。