如何解决在运行时获取方面的实例
我正在运行一个命令行应用程序,该应用程序使用基于注释的方面来收集统计信息。
是否可以检索方面实例以获取统计信息?还是唯一可能的方法是将统计信息保留为static
变量,并在所需的时刻获取它?
@Aspect
public class StatisticsAspect {
private static final Logger LOGGER = Logger.getLogger(StatisticsAspect.class);
private final Statistics statistics;
public StatisticsAspect() {
statistics = new Statistics();
}
// Some code...
}
解决方法
AspectJ方面默认为单例,即使用静态变量(如果您存储与线程相关的信息,则可以使用静态ThreadLocal
),并且可能提供一个不错的静态getter方法是一个不错的选择。还有其他实例化模型,但是对于它们,您需要以不同的方式声明方面,例如@Aspect("perthis(execution(* ajia.Account.*(..)))")
。总而言之,有实例化类型perthis()
,pertarget()
,percflow()
,percflowbelow()
和pertypewithin()
。如果您的统计信息确实是全球性的,则无需担心。
作为替代方案,您也可以将统计信息保留在实例变量中,但是如果像您的情况那样是私有的,则还需要为其提供一个getter方法,例如public Statistics getStatistics()
。在这种情况下,如果要访问由AspectJ管理的单例方面实例,则应使用Aspects.aspectOf(StatisticsAspect.class)
,另请参见AspectJ manual。然后,您将像这样访问数据:
Aspects.aspectOf(StatisticsAspect.class).getStatistics();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。