Tag: 编译时编织

如何使用Java 1.6 Annotation Processing执行编译时编织?

我创建了一个注释,将其应用于DTO并编写了Java 1.6样式的annotationProcessor。 我可以看到如何让annotationProcessor编写一个新的源文件,这不是我想要做的,我看不到或者找不到如何修改现有的类(理想情况下只修改字节代码)。 修改实际上是相当简单的,我希望处理器做的就是插入一个新的getter和setter,其名称来自正在处理的注释的值。 我的注释处理器看起来像这样; @SupportedSourceVersion(SourceVersion.RELEASE_6) @SupportedAnnotationTypes({ “com.kn.salog.annotation.AggregateField” }) public class SalogDTOAnnotationProcessor extends AbstractProcessor { @Override public boolean process(final Set annotations, final RoundEnvironment roundEnv) { //do some stuff } }

为什么AspectJ编译时不编织Spring的@Configurable工作?

更新5:我已经下载了基于最新Eclipse的最新Spring ToolsSuite IDE。 当我将项目导入为Maven项目时,Eclipse / STS似乎使用Maven目标来构建我的项目。 这意味着AspectJ最终在Eclipse中正常工作。 更新4:我最终只是使用Maven + AspectJ插件进行编译时编织,有效地绕过了Eclipse的机制。 更新3:似乎AspectJ的Eclipse插件破坏了Eclipse正确发布到Tomcat的能力。 只有删除项目中的AspectJfunction,才能让它再次正确发布。 很烦人。 更新2:我现在在Eclipse中工作了。 这样说让我感到非常不舒服,但我不知道如何使用Eclipse或Maven构建它。 它似乎是一个编译问题而不是运行时问题。 更新1:看来我已经通过Maven构建工作了,但我不知道如何。 Eclipse仍然无法正常工作。 我在pom.xml中唯一改变的是添加这些(无关紧要的?)配置参数: 1.6 1.6 true true true 我实际上担心我会重复这个问题 ,其中一切都不一致。 随着我了解更多信息,我会更新此问题。 关于Eclipse,我通过采用我想编织的二进制方面取得了一些进展 – 在本例中是spring-aspects.jar – 并将其复制出我的类路径。 然后我将这个外部jar添加到我的Aspect Path中 。 执行此操作后,Eclipse在我的代码中正确显示了AspectJ标记。 令人讨厌的是,我不能将spring-aspects.jar留在我的Java Build Path中 ,这是由Maven通过Maven插件为我维护的。 但是,出于某种原因,除非将AspectJ插件显式添加到Aspect Path,否则AspectJ插件不会看到二进制方面。 原始post: @Configurable是一个Spring注释,它允许将依赖项注入到Spring外部实例化的对象中(例如,通过Hibernate或某些Factory类)。 我以前使用这个注释与加载时编织,它主要工作。 偶尔我会启动,没有任何东西会被注入。 这个问题催生了这个StackOverflow问题 。 答案并不多,但大多数人建议我尝试编译时编织,因为可靠性更高。 我为Eclipse和Maven安装了AspectJ插件。 这两者都产生了看似正确编译的类。 我在AspectJ编译之前在文本编辑器中打开了其中一个类,但没有找到对AspectJ的引用。 我在AspectJ编译后打开它,Eclipse和Maven生成的版本都引用了org.aspectj.weaver.MethodDeclarationLineNumber 。 这就是我认为它被正确编译的原因。 […]