Java 用@Transactional causes”注释方法;未定义类型为的唯一bean:应为单个bean,但找到0“;

Java 用@Transactional causes”注释方法;未定义类型为的唯一bean:应为单个bean,但找到0“;,java,spring,Java,Spring,使用@Transactional注释实现类中的方法会引发此异常 // Interface public interface JobManager { public void process(CommandLine parameters); } // Implementing class public class UserJobManager implements JobManager{ @Transactional @Override public void

使用
@Transactional
注释实现类中的方法会引发此异常

// Interface
public interface JobManager {

    public void process(CommandLine parameters);
}

// Implementing class
public class UserJobManager implements JobManager{

    @Transactional
    @Override
    public void process(CommandLine line) {
        // Stuff here
    }
}
弹簧配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="benchmarkManager" class="com.test.userjobmanager.UserJobManager"/>

    <tx:annotation-driven transaction-manager="transactionManager" order="10"/>

    <bean id="transactionManager" 
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

         <property name="dataSource" ref="readDataSource"/>
    </bean>

    <!-- other beans here -->
</beans>
我有以下跟踪:

线程“main”中出现异常 org.springframework.beans.factory.noSuchBean定义异常:否 类型为[com.test.userjobmanager.userjobmanager]的唯一bean是 已定义:应为单个bean,但在找到0: org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:269) 在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)

如果我删除
@Transactional
,它就可以正常工作。
我不确定这里的问题是什么。

也许您使用的是一种创建合成类的代理技术。也就是说,事务bean的真正类可能不再是
UserJobManager
。我建议改为按名称访问bean:

JobManager jobManager = ac.getBean("benchmarkManager", JobManager.class)

也许您正在使用一种代理技术来创建一个合成类。也就是说,事务bean的真正类可能不再是
UserJobManager
。我建议改为按名称访问bean:

JobManager jobManager = ac.getBean("benchmarkManager", JobManager.class)

@AliDehghani添加了事务管理器配置。@AliDehghani添加了事务管理器配置。工作!。那么这是否意味着创建的合成类也是一种接口类型呢。。。合成代理类实现被代理的类的接口。Worked!。那么这是否意味着创建的合成类也是一种接口类型呢。。。合成代理类实现被代理类的接口。