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

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



