映射事务
许多框架使用注解来指定重要的类和入口点,这些都可以转化为 jvmguard 中的事务。使用“映射调用”事务类型, 可以让 jvmguard 来完成这项工作。
方法注解和类注解
Section titled “方法注解和类注解”映射事务定义接受所关注注解的完全限定类名。注解可以用于类或方法。在继续配置之前,必须告诉 jvmguard 所选注解用于哪种目标。
对于带注解的方法,每次方法调用都会成为 jvmguard 中的一个事务。类上的注解会为所有对 public 实例方法 的调用创建事务。
第二个选择是是否也考虑派生类。对于方法,捕获重写方法中的耗时可能很重要。例如,如果框架创建了一个实现 代理类并重写了带注解的方法以添加数据库事务,就会想拦截代理类中的方法,而不仅仅是带注解的方法。
对于带注解的类,“方法选择”选项决定选择哪些方法来生成事务:
- 实现或重写的 public 方法:如果注解放在接口上,而该接口已经用其方法定义了所有关注的操作,应选择 此选项。
- 实现类或派生类的所有 public 方法:如果派生类有自己关注的方法,而这些方法不实现或重写带注解类中的 方法,使用此选项可以从所有 public 方法创建事务。

在类上使用注解并设置为拦截派生类中的 public 方法时,剩下的问题是事务命名中应使用哪个类名。
默认情况下,“类名”类型的命名元素添加的是被拦截方法所定义类的名称。如果想改为添加带注解超类的名称, 请在向导的“注解”步骤中勾选“将带注解的类名用于过滤和命名”复选框。
如果想反过来,添加实际调用方法所在实例的类名,请改用“实例类名”命名元素。

更具体地,“实例名”命名元素会添加对调用事务方法所在对象的 toString() 调用。

此命名元素还可以对该对象应用一个 getter 链,并改为将链式调用结果的 toString() 追加到事务名称。例如,
如果实例类有一个返回所需文本的 getVerbose() 方法,将 getter 链设置为 getVerbose()。可以混合使用
public 字段访问和 public 方法的无参调用,如下所示:
getParent().descriptor.getVerbose()如果使用 getClass() 方法来追加类名,jvmguard 提供两个特殊字段,用于模拟“类名”和“实例类名”命名
元素可用的缩写类名和简单类名模式:
- 使用 getClass().simpleName 时,添加不带包名的类名。例如 com.mycorp.MyClass 变成 MyClass。
- 使用 getClass().abbrevName 时,添加缩写包名。例如 com.mycorp.MyClass 变成 c.m.MyClass。
注意,“实例名”命名元素产生的开销远高于“实例类名”或“类名”命名元素,因为它总是涉及实际的方法调用。