Tag: cglib

如何强制Hibernate 3.3或3.5使用CGLib而不是Javassist?

是否仍然可以强制Hibernate 3.3或3.5使用CGLib而不是Javassist? 在我的属性文件中,我设置了 hibernate.bytecode.provider = cglib 但这似乎并没有这样做。 有什么想法吗?

Java – 动态创建子类

我想以编程方式创建一个子类。 我想我有几个选择 – Javassist,CGLib,BCEL或ASM。 用例是一个应用程序的内部是面向类的,扩展是基于类的。 因此,我不能将单个类作为外部化脚本驱动的多个扩展的基础。 现在 – 我该怎么做? 我找到了拦截​​方法调用,字段访问,初始化等的例子。但是没有关于子类化的内容。 我想最后得到一个课程: 有一个我想要的名字。 是给定类的(直接,最好)子类 从父类复制构造函数(或调用super(…) ) 最后,我想给它一些注释。 我知道这是可能的,因为各种动态语言集成,如GroovyClassLoader ,可以做到这一点。

Spring Batch @StepScope无法生成CGLIB子类

编辑 我创建了一个复制问题的测试项目。 它可以在https://github.com/tomverelst/test-batch找到。 首先运行maven命令exec:java来启动HSQL数据库。 然后,您可以运行JUnit测试MigrationJobConfigurationTest来加载Spring应用程序上下文。 原始问题 启动Spring Batch应用程序时,Spring加载我的作业配置时出现以下exception: Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy34]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy34 这是由我的作业配置中的@StepScope注释引起的。 它试图用已经用JDK代理代理的CGLIB代理一个类,我不知道这个JDK代理的来源。 我也尝试过使用@Scope(value = “step”, proxyMode = ScopedProxyMode.NO) ,但是在调用JDK代理时会出现堆栈溢出错误,而JDK代理一直在调用自己。 如果删除@StepScope注释,应用程序将正确启动,但我需要能够将它们用于我的工作。 Spring配置 […]

使用大量AOP请求范围bean时的性能问题

我正在使用Spring 3处理一个半大型应用程序,并且在同时向其投入数百个用户时遇到了性能问题。 我使用Spring的AOP代理使用了几个请求范围的bean,我可以看到,每当我调用其中一个bean上的任何方法时,都会调用CGLIB拦截器,然后调用AbstractBeanFactory.getBean(),它调用add()on现有Spring bean的同步集。 由于这个add()是同步的,所以当有数千个调用它等待添加到同一个列表时,它会有效地锁定服务器。 有没有办法使用请求范围的bean来解决这个问题? 我在Spring文档中读到,如果bean实现了任何接口(http://static.springsource.org/spring/docs/2.0.0/reference/aop.html#d0e9015),那么CGLIB不会被使用,但是我的请求范围是bean所有实现一个(实际上是同一个),它仍然发生。 我肯定需要将bean作为请求作用域,因为它们的某些字段是在应用程序的一个部分中为特定请求计算的,然后我使用SpEL在同一请求期间在应用程序的不同部分获取它们的值。 我想如果我把bean原型作为范围,当我第二次使用SpEL来获取它时,我会有一个新鲜的对象。 这是一个代码示例,说明了我的问题。 请参阅最后两行,以获取描述我究竟遇到问题的评论。 public Interface SomeInterface { public String getProperty1(); public void setProperty1(String property); public String getProperty2(); public void setProperty2(String property); } public class SomeClass implements SomeInterface { private String property1; private String property2; public String getProperty1() { return propery1; } public void setProperty1(String property) { property1=property;} […]

$$和在java stacktrace中的含义是什么?

很多时候我得到像这样的堆栈跟踪(请参阅箭头的混乱线): org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:164) at org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:741) at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:589) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653) ———> at com.panpwr.admin.services.detector.SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639.saveComplexRuleAndActionTemplates() at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) … … … $$符号是什么,“生成”是什么意思? com.panpwr.admin.services.detector.SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639.saveComplexRuleAndActionTemplates() 为什么它只说执行的方法而不是它中的行?

如何在Spring配置文件中混合使用CGLIB和JDK代理?

这个线程与我在这里遇到的有关访问受建议类的受保护方法的需求有关 。 我正在使用Spring 3.0.6,并创建了一个Spring分析方面,我正在使用JDK代理应用于大量的bean。 但是,由于需要访问一个特定bean中的受保护方法,我想使用CGLIB建议它。 所有其他bean我想继续使用JDK Proxies。 我使用了注释和xml配置的混合,但这个特定方面是在XML配置中定义的。 我知道有标签,但据我所知,这适用于所有方面。 无论如何要定义单个方面来使用CGLIB吗? 我试图将配置拆分为两个,并且对于一个配置指定target-class=”true”而另一个target-class=”false” ,但它似乎在那时将CGLIB应用于所有人。 有没有办法实现这个目标? 谢谢, 埃里克

如何在java中创建一个保留方法参数注释的动态代理?

我目前正在尝试代理一些现有的JAX / RS资源,以便允许我使用Hibernate Validator的方法validation支持。 但是,当我代理我的类(当前使用cglib 2.2)时,FormParam注释不存在于代理类中的参数上,因此JAX / RS运行时(apache wink)不会填充参数。 这里有一些测试代码显示: import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import javassist.util.proxy.ProxyFactory; public class ProxyTester { @Target( { PARAMETER }) @Retention(RUNTIME) public static @interface TestAnnotation { } public static interface IProxyMe { void […]

尝试重新转换类时得到“UnsupportedOperationException”

JDK1.6,动态修改jvm中加载的类。 当我评论代码时: classReader.accept(classAdapter, ClassReader.SKIP_DEBUG); , “UnsupportedOperationException”exception消失。 实际上,为了测试我的代码,我没有修改任何字段或方法。 但是程序在调用retransformClasses()之后捕获exception”UnsupportedOperationException” 。 有没有类似的例外? 可以给我一些建议吗? 代码如下: public byte[] modifySleepMethod() throws Exception { System.out.println(“Call modifySleepMethod”); ClassReader classReader = new ClassReader(classfileBuffer); System.out.println(“new classreader”); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); System.out.println(“new classwriter”); ClassAdapter classAdapter = new ModifyMethodClassAdapter(classWriter); classReader.accept(classAdapter, ClassReader.SKIP_DEBUG); byte[] classFile = null; classFile = classWriter.toByteArray(); FileOutputStream fos; try { fos = new […]

错误:java.lang.NoSuchMethodError:org / springframework / asm / ClassVisitor。(I)V

我在我的POM中有这两个依赖项,我认为创建此问题但我尝试了许多不同的方法和更新版本,但没有任何方法对我有用。 有人可以请帮助。 的pom.xml org.springframework spring-aop 4.2.0.RELEASE cglib cglib 2.2

如果Java中的reflection减慢了命令的执行速度,为什么这么多框架会使用它呢?

根据我的理解,使用JavareflectionAPI会减慢订单执行代码的速度。 但后来我发现它被用在Java宇宙中的很多地方。 仅举几例: 注释 Spring框架(AOP) 过冬 MyBatis的 这意味着我错过了一些关于javareflection(也就是优化技术)的事实。 有什么指针吗?