使用BaseSPIManager获取组件实例和直接创建组件实例的区别

简介: bboss 项目下载地址: https://sourceforge.net/project/showfiles.php?group_id=238653 只有通过BaseSPIManager提供的两个方法获取接口实例,然后在接口实例上调用事务方法,声明的事务管理才会生效,否则无效。

bboss 项目下载地址:

https://sourceforge.net/project/showfiles.php?group_id=238653

只有通过BaseSPIManager提供的两个方法获取接口实例,然后在接口实例上调用事务方法,声明的事务管理才会生效,否则无效。举例说明如下:

假如接口AI和接口实现类A,接口中定义了方法handle,并且将该方法声明为事务方法,

aa

 

在配置文件中做以下的配置:

<manager id="test.A" singlable="true" >

<provider type="DB" default="true"

           class="test.A" />

<transactions>

<method name="handle" txtype="REQUIRED_TRANSACTION"/>

</transactions>

</manager>

 

声明组件的管理idtest.A,我们通过以下两种方式获取接口实例:

方法1 直接创建对象实例a,在实例a上调用handle方法

AI a = new A();

a.handle();

采用这种方式时,为handle方法声明的事务不会生效。

方法2 通过BaseSPIManager提供的接口获取接口实例

AI a = (AI)BaseSPIManager.getProvider("test.A");

a.handle();

采用这种方式,为handle方法声明的事务才会生效。

业务组件必须由两部分组成:组件接口,组件接口的实现类;这是因为通过BaseSPIManager的两个方法所获取到的对象必需是一个接口对象,这里不能直接将返回值直接转换为具体的实现类型,以下的用法是正确的:

AI a = (AI)BaseSPIManager.getProvider("test.A");

以下的用法是不正确的,但是编译时不会报错,运行时会报类型转换错误,这是因为方法返回的是一个实现接口AI的代理对象,而不是一个A类型的对象了:

A a = (A)BaseSPIManager.getProvider("test.A");

目录
相关文章
feign使用url参数传参@SpringQueryMap使用
feign使用url参数传参@SpringQueryMap使用
245 0
|
6月前
|
JSON API 数据格式
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
|
7月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
573 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
9月前
|
运维 监控 BI
卓越架构之FinOps最佳实践
本文探讨了云成本管理的趋势和FinOps的最佳实践。随着云计算的普及,传统的IT管理模式已无法适应按需使用和按量付费的新模式,导致企业面临资源浪费和成本失控的风险。FinOps作为一种管理理念,强调运维、财务和技术团队的合作,通过数据驱动和业务价值驱动的方式优化云成本。文章介绍了FinOps的核心挑战、最佳实践及技术工具的应用,帮助企业有效管理和优化云成本,实现降本增效。
|
12月前
|
Web App开发 SQL 流计算
常见的浏览器内核
常见的浏览器内核
|
11月前
|
数据采集 存储 数据管理
cdga|数据治理策略:击破壁垒,迈向纵向一体化的新纪元
企业将逐步击破数据壁垒,实现数据的纵向一体化。这意味着企业能够更高效地整合内外部数据资源,形成全面、准确、及时的数据视图,为管理层提供有力的决策支持。同时,数据的一体化也将促进业务流程的优化和创新,推动企业向智能化、数字化转型迈进。
cdga|数据治理策略:击破壁垒,迈向纵向一体化的新纪元
|
Rust 安全 C++
系统编程的未来之战:Rust能否撼动C++的王座?
【8月更文挑战第31天】Rust与C++:现代系统编程的新选择。C++长期主导系统编程,但内存安全问题频发。Rust以安全性为核心,通过所有权和生命周期概念避免内存泄漏和野指针等问题。Rust在编译时确保内存安全,简化并发编程,其生态系统虽不及C++成熟,但发展迅速,为现代系统编程提供了新选择。未来有望看到更多Rust驱动的系统级应用。
237 1
|
11月前
|
机器学习/深度学习 人工智能 测试技术
VisionTS:基于时间序列的图形构建高性能时间序列预测模型,利用图像信息进行时间序列预测
构建预训练时间序列模型的主要挑战在于获取高质量、多样化的时间序列数据。目前有两种方法:迁移学习LLM(如GPT-4或Llama)和从零训练。尽管迁移学习可行,但效果有限;从零训练则依赖大量数据,如MOIRAI、TimesFM和TTM等模型所示。为解决这一难题,研究人员提出利用图像数据进行时间序列预测。
690 11
VisionTS:基于时间序列的图形构建高性能时间序列预测模型,利用图像信息进行时间序列预测
|
11月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
Ubuntu Java Linux
Ubuntu20.04下载jdk遇到各种奇怪问题大集,Linux如何将默认的OpenJDK切换成自己安装的JDK版本(以JDK1.8为例),无需卸载原有OpenJDK,Some packages co
Ubuntu20.04下载jdk遇到各种奇怪问题大集,Linux如何将默认的OpenJDK切换成自己安装的JDK版本(以JDK1.8为例),无需卸载原有OpenJDK,Some packages co