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!。那么这是否意味着创建的合成类也是一种接口类型呢。。。合成代理类实现被代理类的接口。