仅使用编译时编织尝试为大量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
问题内容: 我有一个当前可与Java 6一起使用并编译时间编织的项目。我们使用以下pom启用spring方面以及我们自己的方面: 我尝试了各种配置,但是不能使其与Java 7一起使用。如果有人可以共享工作的pom或导致它,那将是很好的。 问题答案: 升级到Aspectjtools的1.7.0版后,它可以正常工作。另外,您需要将版本参数传递给编译器(使用该参数会导致问题)。如果有人需要更多详细信息,
我有一个使用编译时编织方面的项目,它依赖于两个外部JAR。我从https://github.com/eveoh/gradle-aspectj使用gradle-aspectj插件 按以下方式生成.分级: 我的项目基于intellij idea(16)+gradle(2.12)+spring boot(1.2.3) 任何帮助都将不胜感激。 ===============================
但还是毫无头绪。