微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在运行时获取方面的实例

如何解决在运行时获取方面的实例

我正在运行一个命令行应用程序,该应用程序使用基于注释的方面来收集统计信息。

是否可以检索方面实例以获取统计信息?还是唯一可能的方法是将统计信息保留为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 举报,一经查实,本站将立刻删除。