当前位置: 首页 > 面试题库 >

在Jenkins中遇到Spring错误“名为'x'的Bean必须为[y]类型,但实际上为[$ Proxy]类型”

慕阳
2023-03-14
问题内容

我已经调试了一段时间,我希望有人可以在这里阐明一些信息。

我有一个使用JDK 1.6添加到Jenkins中的Maven项目。我在这个项目中使用AOP来处理数据库事务。

当我在Jenkins中运行构建时,我的测试用例由于以下异常而失败:

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'dataHandlerClassificationImpl': 
Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanNotOfRequiredTypeException: 
Bean named 'writerDataLocationImpl' must be of type [xxx.script.WriterData], 
but was actually of type [$Proxy17]
    ...
    ...
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: 
Bean named 'writerDataLocationImpl' must be of type [xxx.script.WriterData], 
but was actually of type [$Proxy17]
    ...
    ...

DataHandlerClassificationImpl类看起来是这样的:

@Service
public class DataHandlerClassificationImpl extends DataHandler {

    @Resource(name="writerDataLocationImpl")
    private WriterData writerData;

    ...
}  

WriterData 是具有多种实现的接口。

我可以从IDE中执行代码而不会出现问题。为了确定是Maven问题还是Jenkins问题,我使用命令行导航到Jenkins的项目作业文件夹,并且能够mvn test无任何错误地运行。

我知道代理错误与AOP有关,并且我只能自动连接到接口,而不是具体的类……但是这里不是这种情况,因为我可以在Jenkins外部很好地运行代码。

谢谢。


问题答案:

摘自上面的问题评论:

你是否在Jenkins上运行Cobertura,Sonar或其他代码工具?请注意,mvn site也可能配置为在generate中包含Cobertura报告site

Cobertura的问题在于它执行相当繁重的字节码检测,包括添加一些自定义接口。当Spring启动时,它将为bean生成代理。如果bean具有至少一个接口,则它将使用标准Java代理。否则,它将尝试创建基于类的代理。

我猜在你的情况下,使用了CGLIB类代理,但是在Cobertura工具spring之后又回到了Java代理。这导致启动错误,因为依赖项注入期望类(或CGLIB子类)。

简而言之,强制使用CGLIB类代理,你会没事的:

<aop:config proxy-target-class="true"/>


 类似资料:
  • 问题内容: 我已经调试了一段时间,我希望有人可以在这里阐明一些信息。 我有一个使用JDK 1.6添加到Jenkins中的Maven项目。我在这个项目中使用AOP来处理数据库事务。 当我在Jenkins中运行构建时,我的测试用例失败,出现以下异常: 本类看起来是这样的: - 是具有多种实现的接口。 我可以在IDE中执行代码而不会出现问题。为了确定是Maven问题还是Jenkins问题,我使用命令行导

  • 我正在尝试使用Spring Security在应用程序中实现基于DAO的身份验证。 当我试图登录到应用程序与用户我得到了这个错误: 看着@jcmwright80对这个问题的回答,我明白了我最好将类注释为。完成此操作后,我在登录时出错: 这似乎是一个与在UserDetailsServiceImpl上创建的代理对象相关的问题-我如何才能优雅地解决这个问题? 密码 安全配置的相关部分: UserDeta

  • 我对下面的技术没有太多的背景,所以任何帮助都将不胜感激。如果有什么不清楚的地方,请随时提问。 我目前正在进行一个迁移项目,我们正在更新一些技术,包括: 赛贝斯-从12. x到15.7 JConnect-从几个版本到7.0.7_SP130 现在,我们的应用程序部署到JBoss 4. x上,并使用Hibernate3.2.4.sp1。在旧的DB中,我们有许多自定义数据类型,看起来像这样(抱歉,很想把它

  • 我正在学习Apollo和graphQL,并将其集成到我的一个项目中。到目前为止一切正常,但现在我正在尝试一些突变,我正在努力处理输入类型和查询类型。我觉得事情比实际情况要复杂得多,因此我正在寻求如何处理我的情况的建议。我在网上找到的示例都是非常基本的模式,但现实总是更加复杂,因为我的模式非常大,如下所示(我只复制一部分): 然后定义输入和负载,依此类推... 为此,我需要一个变异来保存“计算”,因

  • 我需要使用SpringDataJPA将实体类的两列映射为postgres中的json。阅读多个stackoverflow post和baeldung post后, 如何使用JPA将MapJSON列映射到Java对象 https://www.baeldung.com/hibernate-persist-json-object 我做了如下配置。但是,我面临错误"ERROR:列"标题"是json类型,但

  • 我是爪哇的新手。我不明白为什么会发生这些错误。尝试创建一个数组列表,以便它保存每个对象。我得到的错误是 表达式的类型必须是数组类型,但它解析为数组列表上的行“newbug1[i].setpecies();” 提前致谢