使用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");

目录
相关文章
|
2月前
|
缓存 JavaScript 搜索推荐
vue中的一个内置组件Keep-Alive的作用及使用方法介绍——缓存不活动的组件实例
vue中的一个内置组件Keep-Alive的作用及使用方法介绍——缓存不活动的组件实例
116 1
|
7月前
|
JavaScript
在父组件中使用子组件时,如何保证子组件的实例在父组件的生命周期中得到正确的更新?
在父组件中使用子组件时,如何保证子组件的实例在父组件的生命周期中得到正确的更新?
35 2
|
5月前
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
291 1
|
7月前
|
存储 JavaScript
如果需要在组件之间共享一个`ref`,应该如何实现?
如果需要在组件之间共享一个`ref`,应该如何实现?
82 0
|
存储 JavaScript
如何使用 ref 属性获取子组件实例对象?
如何使用 ref 属性获取子组件实例对象?
148 0
|
缓存 JavaScript 数据处理
【Vue实例对象】五分钟学会配置对象的配置选项
我们知道每一个vue项目应用都是通过vue的构造函数进行创建一个新的vue项目的。创建vue实例的配置对象,可以包括一下属性选项,比如:data、methods、watch、template等等,每一个选项都有不同的功能,大家可以根据自己的需求选择不同的配置。
【Vue实例对象】五分钟学会配置对象的配置选项
|
开发框架 JavaScript 前端开发
Vue实例初始化的选项配置对象详解
Vue实例初始化的选项配置对象详解
220 0
|
JavaScript 开发者
组件-创建组件的方式3|学习笔记
快速学习组件-创建组件的方式3
组件-创建组件的方式3|学习笔记
|
JavaScript 开发者
组件-创建组件的方式1|学习笔记
快速学习组件-创建组件的方式1
组件-创建组件的方式1|学习笔记