Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将weblogic spring web应用程序转换为springboot应用程序时出现CGLIB错误_Java_Spring_Spring Boot_Cglib - Fatal编程技术网

Java 将weblogic spring web应用程序转换为springboot应用程序时出现CGLIB错误

Java 将weblogic spring web应用程序转换为springboot应用程序时出现CGLIB错误,java,spring,spring-boot,cglib,Java,Spring,Spring Boot,Cglib,我正在尝试将现有的SpringWebLogic应用程序转换为SpringBoot嵌入式tomcat应用程序 有很多运动部件,所以很难显示任何代码,我希望有一些一般性的答案,可能会提示我的问题 在weblogic下,使用SpringFramework4.3.6.RELEASE库,应用程序可以很好地部署。创建不同的服务、存储库和组件bean没有问题 但是,当我将其迁移到Spring Boot 1.5.1.RELEASE时,我得到以下错误: 2017-06-21 17:08:16,402 [ERROR

我正在尝试将现有的SpringWebLogic应用程序转换为SpringBoot嵌入式tomcat应用程序

有很多运动部件,所以很难显示任何代码,我希望有一些一般性的答案,可能会提示我的问题

在weblogic下,使用SpringFramework4.3.6.RELEASE库,应用程序可以很好地部署。创建不同的服务、存储库和组件bean没有问题

但是,当我将其迁移到Spring Boot 1.5.1.RELEASE时,我得到以下错误:

2017-06-21 17:08:16,402 [ERROR] SpringApplication reportFailure (815) - Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'alertEventServiceImpl': Unsatisfied dependency expressed through field 'alertEventDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'alertEventDaoImpl' defined in URL [jar:file:/Users/username/Development/source/carma-war/target/carma-war-2.0.0-SNAPSHOT.war!/WEB-INF/lib/protocol-manager-1.8.0-SNAPSHOT.jar!/org/ihc/hwcir/protocol/dao/AlertEventDaoImpl.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class org.ihc.hwcir.protocol.dao.AlertEventDaoImpl]: 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 org.ihc.hwcir.protocol.dao.AlertEventDaoImpl
我们的许多服务类别都是最终的,因为它们不应该扩展。因为有太多的是最终版本,所以我想尽量减少我们不同库中的代码量,我们可以修改这些代码来实现这一点

我认为因为bean创建过程在weblogic下工作,所以它应该在spring引导下工作

我试图强制不使用cglib代理的事情:

  • 所有实现都已经实现了接口
  • 在通过xml创建的bean中,添加了
  • 在通过注释创建的bean中添加(例如服务bean)
  • @服务
    @作用域(proxyMode=ScopedProxyMode.INTERFACE)


    然而,最后,我很困惑为什么spring可以在weblogic容器下创建bean(标记为final的类),但不能在嵌入式tomcat spring引导容器下创建bean。

    spring引导默认使用基于类的代理,这将不适用于
    final
    类/方法

    要禁用此功能,请将
    spring.aop.proxy target class=false
    添加到
    application.properties
    以启用JDK动态代理,而不是基于类的代理。(并恢复您的修改)

    注意:要使所有内容都考虑到
    spring.aop.proxy目标类
    ,您可能需要升级到spring Boot 1.5.3,作为一些最终补丁,在以前版本中丢失的部分中包含此属性


    有关更多信息,请参阅以下问题。

    我无法使用M.Deinums使用spring.aop.proxy target class=false给出的答案来完成这项工作

    对我有效的方法是在application.properties文件中添加

    spring.dao.exceptiontranslation.enabled=false
    
    请注意,此选项禁用存储库的代理创建

    在我的spring boot应用程序中,将注释配置为在不使用代理类的情况下处理事务

    @EnableTransactionManagement(proxyTargetClass = false)
    

    这是使用Spring Boot版本1.5.1.RELEASE。

    在web逻辑容器中,它不使用CGLIB,而是使用基于接口的JDK动态代理。SpringBoot强制类代理和禁用,您需要修改配置。此外,您没有使用作用域代理,因此将to属性设置为false不会产生任何影响。您必须更改事务处理,覆盖JPA设置的一些配置等,以拥有基于接口的代理。请参阅示例问题。对于Spring Boot 1.5,您应该在
    应用程序中设置
    Spring.aop.proxy target class=false
    。properties
    ,这样您就可以开始了。默认值为
    true
    。不幸的是,这样做不起作用。使它工作的是这个设置,不知道为什么。spring.dao.exceptiontranslation.enabled=false。。。你知道吗?然而,您与事务管理器打交道的另一个问题的链接是正确的。我很高兴接受这个答案,如果你添加链接,让我理解为什么exceptiontranslation.enabled=false而不是aop.proxy-target-class起作用。这基本上禁用了存储库的异常转换,因此需要为存储库创建代理。我建议您自己配置
    PersistenceExceptionTranslationPostProcessor
    并将
    proxyTargetClass
    属性设置为false,而不是禁用它。(除了
    spring.aop.proxy target class=true
    。这基本上禁用了存储库的异常转换,因此不需要为存储库创建代理。我建议您自己配置
    PersistenceExceptionTranslationPostProcessor
    ,并将proxyTargetClass属性设置为false。(除了
    spring.aop.proxy target class=false
    )。
    PersistenceExceptionTranslationAutoConfiguration
    考虑了这个属性,奇怪得无法工作。(啊,这是在spring Boot 1.5.3中添加的,所以你可能想升级到最新的1.5.x版本,而不是禁用它)。