当前位置: 首页 > 面试题库 >

用AspectJ编织toString()实现

洪安顺
2023-03-14
问题内容

仅使用编译时编织尝试为大量DTO编织默认的toString()方法。目标是使用Jackson库返回JSON表示形式。

遵循本文的建议,将其转换为注释样式的方面配置,并得到以下代码:

public @Aspect class JsonToStringAspect {
    private interface JsonToString {
        public String toString();
    }

    public static class JsonToStringImpl implements JsonToString {
        public String toString() {
            return SingletonJsonEncoder.toJsonString(this);
        }
    }

    @SuppressWarnings("unused")
    @DeclareParents(value = "com.mycompany.dto..*", defaultImpl = JsonToStringImpl.class)
    private JsonToString implementedInterface;
}

javap在结果类上运行表明它们实现了JsonToString接口,但是在任何地方都没有toString()方法的迹象。

如果我将方法名称更改为与Object.toString()不冲突的名称(例如toString2()),则会真正添加该方法。

关于如何克服这一点的任何线索?也许@Around关于切入点的建议会拦截java.lang.Object.toString()的执行,仅适用于包以下的子类com.mycompany.dto?还是强迫混合发生的方法?


问题答案:

我想你的情况和可以复制的行为,我也尝试过的组合@DeclareMixin代替@DeclareParent,不能得到这工作要么。虽然对我有用,但是以这种方式使用本机aspectj:

public aspect JsonToStringAspect {
    private interface JsonToString {}
    declare parents: com.mycompany.dto.* implements JsonToString;

    public String JsonToString.toString() {
        return "Overridden String through JsonToStringAspect";
    }
}

我猜想这可能无法使用,@AspectJ并且只能通过本机方面才能实现。



 类似资料:
  • 是否有可能拥有一个Scala Maven项目,并在Scala类中编译时编织AspectJ方面? 我已经能够使加载时编织工作,但到目前为止没有成功的编译时。

  • 问题内容: 我正在将项目从Java 7迁移到Java 8,而我遇到的问题与使用进行AspectJ编织有关。 根据Haus文档,我可以使用在Java 6和7上运行的此插件成功配置编织。但是问题是,我还没有找到使用(和找到)支持Java 8的插件版本7的任何方法。我在这里看到插件7添加了Java 8支持,但是找不到使用它的方法。 这是我需要的配置插件: 我确认上述使用1.6版的代码对于Java 7可以

  • 我在Eclipse中设置了三个项目, 1)aspects_project-该项目包含一个方面测试方面,我想编织到某些JDK类和类application_project 2) application\u project-此项目在其Aspect路径上有aspects\u项目。 3)jdk_project-该项目在其Aspect Path上aspects_project,在其InPath上classes

  • 我有一个使用编译时编织方面的项目,它依赖于两个外部JAR。我从https://github.com/eveoh/gradle-aspectj使用gradle-aspectj插件 按以下方式生成.分级: 我的项目基于intellij idea(16)+gradle(2.12)+spring boot(1.2.3) 任何帮助都将不胜感激。 ===============================

  • 问题内容: 我有一个当前可与Java 6一起使用并编译时间编织的项目。我们使用以下pom启用spring方面以及我们自己的方面: 我尝试了各种配置,但是不能使其与Java 7一起使用。如果有人可以共享工作的pom或导致它,那将是很好的。 问题答案: 升级到Aspectjtools的1.7.0版后,它可以正常工作。另外,您需要将版本参数传递给编译器(使用该参数会导致问题)。如果有人需要更多详细信息,