深入理解自定义作用域:从实现到陷阱
1. 事务作用域概述
事务如同单例或 HTTP 会话一样,是应用程序中的特定上下文。注入器可以利用事务作用域来减少辅助数据和占位符对象的传递,通过将事务相关的问题转移到事务作用域依赖中,提高代码的可维护性。
在定义自定义作用域之前,需要思考以下几个问题:
- 该作用域所代表的上下文是否清晰定义?
- 对象是否必须在该作用域的整个生命周期内存在,且作用域内的所有实例都符合这一规则?同一键在作用域内不应有两种不同的生命周期。
- 是否会有多个线程访问该作用域内的对象?
事务作用域有明确的开始和结束点,并且通常局限于一个执行线程。设计局限于单线程的作用域是更优的选择,因为它们本质上更简单,易于测试和推理。绑定在单线程作用域下的类也无需担心线程安全问题,便于设计和测试。
2. 事务作用域的用例:核电站启动
以核电站启动为例,需要编写软件来启动反应堆并向电网供电。有三个腔室需要激活,它们必须全部激活或全部不激活。如果腔室过热,则都不能激活。我们将其建模为一个具有共同逻辑目标(即核电站启动)的事务。
以下是模拟事务性核电站的代码:
public class PowerStation {
...
public void start() {
transaction.begin();
chamber1.fire();
chamber2.fire();
chamber3.fire();
transac
超级会员免费看
订阅专栏 解锁全文
855

被折叠的 条评论
为什么被折叠?



