当前位置: 首页 > 知识库问答 >
问题:

@事务性注释类不能自动生成

郎言
2023-03-14

我试图执行一个集成测试,我的类与@Transactional注释不能自动连接到一个测试类与NoSuchBean定义异常。我把它注释出来,检查了一份装载豆子的列表,我的服务就在那里,只是没有注射。

组织。springframework。豆。工厂BeanCreationException:创建名为“com”的bean时出错。icsynergy。西姆。服务DBIntegrationServiceTest”:自动连线依赖项的注入失败;嵌套的异常是org。springframework。豆。工厂BeanCreationException:无法自动关联字段:private com。icsynergy。西姆。服务dbintegrationservicecom。icsynergy。西姆。服务DBIntegrationServiceTest_服务嵌套异常是

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.icsynergy.scim.service.DBIntegrationService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

如果我删除这个注释,它会被注入,但没有事务支持。

这是我的班级

@Slf4j
@Service(value = 'integrationService')
@EnableConfigurationProperties(DBIntegrationConfig.class)
//@Transactional
class DBIntegrationService implements IntegrationService, HealthIndicator {...

我试着把它注射成

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
class DBIntegrationServiceTest {

@Autowired
DBIntegrationService _service
...

下面是应用程序。班

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = [
    "com.icsynergy.scim.repository",
    'com.icsynergy.scim.service',
    "com.icsynergy.scim.web",
    "com.icsynergy.scim.config"
], excludeFilters = [
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value =   OktaSCIMService.class),
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = DBIntegrationService.class)
])
@ImportResource("config.xml")
@EnableTransactionManagement
public class Application { 
....

这是config.xml的碎片

<bean name="integrationService" class="com.icsynergy.scim.service.DBIntegrationService"/>

<bean name="service" class="com.icsynergy.scim.service.OktaSCIMService">
    <property name="service" ref="integrationService"></property>
    <property name="implementedUserManagementCapabilities">
        <list value-type="com.okta.scim.server.capabilities.UserManagementCapabilities">
            <value>GROUP_PUSH</value>
        </list>
    </property>
</bean>

编辑:找到了一个变通方法。由于我的服务实现了集成服务,所以注入它实际上有助于避免异常。还是不明白我原来的注射有什么问题

如果你有什么想法,我会很感激的,蒂娅


共有1个答案

曾光誉
2023-03-14

您最好使用接口,但不要使用具体类,因此您的代码应如下所示:

@Autowired
IntegrationService _service

如果没有接口,则应创建一个接口。

 类似资料:
  • 试图收集和理解@事务性注释的要点并越过了一点。因此,在使用事务性注释时,我们需要记住的主要事情是: 事务注释只能应用于公共方法[根据Spring@Transactional属性对私有方法起作用吗? 事务性注释应该应用于具体的类,而不是接口[根据我应该将@transactional annotation放在接口定义还是实现类的位置? 事务注释应应用于服务级别[根据Spring@Transaction

  • 我正在使用MongoDB的springboot 2.3.0。注释对我不起作用。如果发生异常,则无法回滚事务。 任何帮助都将得到高度赞赏。 我的控制器类: 我的serviceImpl类 我的MongoConfig类

  • 在我们的一个项目中,我们遇到了一个问题,Spring忽略了事务注释,然后失败了,出现了以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2018-09-13 15:05:18406错误[主]组织。springframework。靴子SpringApplication应用程序运行失败组织。springframework。道。Inva

  • 我正在阅读使用Spring框架的事务管理。在第一个组合中,我使用Spring Hibernate和Hibernate的API来控制事务(Hibernate API)。接下来,我想使用注释进行测试,它确实起了作用。 我感到困惑的是: > JPA、JTA、Hibernate是否有自己的事务管理方式。举个例子,考虑如果我使用Spring Hibernate,在那种情况下,你会使用“JPA”事务吗? 就像

  • 问题内容: 之间有什么区别? 在整个类中添加“ @Transactional”注释 为每个方法添加“ @Transactional”注释? 使用spring和Hibernate吗? 问题答案: 基本上,如果您用所有方法注释该类,则将是事务性的。如果您不这样做,则可以仅将其标注为所需的方法。此外,你可以为每个方法指定不同的属性,如,,,…

  • 我正在尝试在数据库中保存对象。正在执行代码并创建实体的Id,但实体未持久化到数据库(未插入行): 从三行(beginTransation,flush,commit)中删除注释解决了问题,但是为什么注释在这里不起作用呢? spring XML: POM xml文件: