Spring 3.1实例化bean时出错

2024-03-04

我有以下课程:

public abstract class AbstractBusinessModule {

}

public class MS3BusinessModule extends AbstractBusinessModule 
{
    public MS3BusinessModule(SomeOtherClass value)
    {

    }
}

以及以下 bean 声明:

<bean id="ms3BusinessModule" class="com.hba.MS3BusinessModule" >
    <constructor-arg index="0">
        <ref bean="someOtherBeanID"/>
    </constructor-arg>
    <aop:scoped-proxy />
</bean>

启动我的应用程序后,我收到以下错误:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ms3BusinessModule' defined in BeanDefinition defined in class path resource [spring.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.hba.MS3BusinessModule]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.hba.EhCacheTest.main(EhCacheTest.java:16)
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.hba.MS3BusinessModule]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
    at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:212)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:112)
    at org.springframework.aop.scope.ScopedProxyFactoryBean.setBeanFactory(ScopedProxyFactoryBean.java:109)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1439)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1408)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    ... 11 more
Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
    at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:721)
    at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:499)
    at net.sf.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
    at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
    at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
    at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:200)
    ... 16 more

可能出了什么问题?

如果我删除<aop:scoped-proxy/>从bean声明来看它是有效的。

更新:如果我将默认构造函数放入MS3BusinessModule, 有用。我不明白为什么需要默认构造函数的原因。有人可以解释一下吗?


如果我在 MS3BusinessModule 中放置默认构造函数,它就可以工作。我不明白为什么需要默认构造函数的原因。有人可以解释一下吗?

The way <aop:scoped-proxy/>工作原理是用不同的名称隐藏“真实”bean,并创建一个 CGLIB 代理类,它是真实 bean 类的子类,并将所有方法调用委托给目标 bean 的正确实例。所以这里有两种不同类型的对象:

  • n的实例com.hba.MS3BusinessModule对于每个会话/请求/无论范围是什么,以及
  • 动态生成的代理类的一个单例实例。

The n目标 bean 是使用带有参数的构造函数构造的,您的<constructor-arg>传递给它的值,但代理类需要一个无参数超类构造函数来调用(当然可以声明protected而不是public)。代理机制永远不会真正调用代理实例上的任何超类方法,因为所有调用都会转到目标实例,但代理类需要扩展目标 bean 类,以便代理成为instanceof正确的类型。

另一种修复方法是提供界面 that M3BusinessModule实现,并使其他 bean 对此 bean 的所有引用都使用接口类型而不是具体类类型。这将允许 Spring 使用java.lang.reflect代理而不是 CGLIB 代理,无需扩展具体类即可实现接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 3.1实例化bean时出错 的相关文章

随机推荐

  • casper.js 中的 setInterval 和 this.wait

    我需要做一个循环每次迭代之间间隔 3 次 2 秒 我尝试了以下 3 个选项 Option 1 var casper require casper create verbose false logLevel debug casper star
  • 如何让 OpenCover 查看本地 bin\Debug 文件夹中的 PDB 而不是 GAC

    我正在使用 OpenCover 4 7 922 和 nUnit 控制台运行程序 3 10 0 我有一个myproj tests测试的项目myproj 建成后 myproj tests bin debug包含myproj tests dll
  • 调用soap webservice从带有轴的java客户端返回对象列表

    我对网络服务感到恼火 我有一个非常简单的肥皂网络服务 Remote public interface StudentService public String sayHello public List
  • 无法创建 MoveConstructibles 地图

    我有一堂课包含std unique ptr lt gt 我想把这个类的实例放在一个std map lt gt 我认为推动 C 引入移动语义的原因之一是可以将诸如unique ptrs在标准容器内 对于向量而言 这确实有效 但在我看来std
  • 用于安装/升级 .NET Core 的命令行

    是否有用于安装或升级 NET Core 的命令行命令 我使用以下命令检查我的计算机上是否安装了 NET Coredotnet version只是注意到我的计算机上仍然安装了预览版本 我想知道是否可以发出一些命令将其升级到最新版本 没有dot
  • 普通对象 VS 模型对象的类实例

    在 Angular TypeScript 中创建模型对象的最佳实践是什么 我应该使用带有对象表示法的类型注释 对象是Object E g let m MyModel name foo 我应该使用new运算符 对象是各自原型的实例 这两种方法
  • Git - 冲突(重命名/删除)是什么意思?

    我在理解其他问题中的含义方面没有取得多大成功 这是一个 Ruby on Rails 项目 如果您知道该怎么做 这可能非常简单 我尝试合并两个分支 这是结果的 部分 CONFLICT rename delete db migrate 2016
  • 如何找到预告片字典?

    浏览 PDF 规范 它说trailer之前的startxref 对我来说 这意味着xref可以出现在文档中的任何位置 但是trailer仍然出现在startxref 在您必须解析它之前 这是有意义的 因为您必须反向解析 您无法考虑注释或字符
  • 行分隔的 json 序列化和反序列化

    我正在使用 JSON NET 和 C 5 我需要将对象列表序列化 反序列化为行分隔的 json http en wikipedia org wiki Line Delimited JSON http en wikipedia org wik
  • Java中如何通过代理发送HTTPS请求?

    我正在尝试使用 HttpsUrlConnection 类向服务器发送请求 服务器存在证书问题 因此我设置了一个信任所有内容的 TrustManager 以及一个同样宽松的主机名验证器 当我直接发出请求时 这个管理器工作得很好 但当我通过代理
  • fputcsv 不会在 CSV 文件中写入任何数据

    在我的网站中 我从 mysql 数据创建一个表 然后现在我想在表底部添加一个导出按钮 以便用户能够将数据下载为 CSV 文件 为此 我编写了虚拟表单
  • preg 匹配重复或增量字符

    我使用 preg match 来验证密码 preg match 5 password 它也接受特殊字符 但由于某种原因 我需要修改它应该接受 仅限字母数字 至少 5 个字符长 非常重要的是它不能有任何重复或 增量字符 例如 aaaa 或 1
  • 对各个页面的不同图像使用 Backstretch

    我希望有人可以提供帮助 我正在尝试使用 jQuery Backstretch 为 Bootstrap Wordpress 中的每个特定页面应用不同的背景图像 例如 主页 bg 图像 a 关于 bg 图像 b 新闻 bg 图像 c 等等 我已
  • 在自定义验证器指令中注入 ngControl 会导致循环依赖

    我正在尝试创建自定义 Angular 2 验证器指令 它像这样注入 NgControl Directive selector ngModel customValidator providers provide NG VALIDATORS u
  • 有关 CUDA 中统一虚拟寻址 (UVA) 的信息/示例

    我试图理解 CUDA 中统一虚拟寻址 UVA 的概念 我有两个问题 是否有任何示例 伪 代码可以演示这个概念 我在 CUDA C 编程指南中读到 UVA 只能在 64 位操作系统上使用 为什么会这样呢 A 统一虚拟地址空间 http doc
  • 如何使用 Hibernate Context 会话创建通用 DAO 类

    我正在尝试使用 Hibernates Context Sessions 实现通用 DAO 以下是我的镜头 import java io Serializable public interface GenericDao
  • 在批处理文件中登录并注册系统

    所以 我非常努力地尝试在批处理文件中制作登录和注册系统 我注册成功 只是将用户名和密码回显到 dll 文件或 txt 文件 但我不知道如何登录 我尝试了很多代码 但我不明白在互联网上找到的登录 注册代码 例如 我尝试过的 echo off
  • 如何使Java应用程序独立?

    我必须将 Java 应用程序刻录到 CD 上 此应用程序必须在之前未进行任何安装的情况下在每台 Windows PC 上运行 也不应安装 JRE 我想您也可以将 JRE 从程序文件夹复制到 CD 上 然后 添加批处理脚本以使用 本地 JRE
  • 词法或预处理器问题:找不到“MyViewController.h”文件

    当我尝试更改视图控制器名称时 h and m 我收到此错误 Lexical or PreProcessor Issue MyViewController h file not found 仅供参考 尽管存在词法错误 但应用程序仍可以正确运行
  • Spring 3.1实例化bean时出错

    我有以下课程 public abstract class AbstractBusinessModule public class MS3BusinessModule extends AbstractBusinessModule public