Tag: aop

为什么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 。 这就是我认为它被正确编译的原因。 […]

Spring AOP切入点与接口上的注释匹配

我有一个在Java 6 / Spring 3中实现的服务类,它需要一个注释来限制角色访问。 我已经定义了一个名为RequiredPermission的注释,它具有一个名为OperationType的枚举中的一个或多个值作为其value属性: public @interface RequiredPermission { /** * One or more {@link OperationType}s that map to the permissions required * to execute this method. * * @return */ OperationType[] value();} public enum OperationType { TYPE1, TYPE2; } package com.mycompany.myservice; public interface MyService{ @RequiredPermission(OperationType.TYPE1) void myMethod( MyParameterObject obj ); } package com.mycompany.myserviceimpl; […]

@Aspect方面的Spring autowired bean为null

我有以下弹簧配置: 然后我有一个方面: @Aspect public class SyncLoggingAspect { @Autowired private SimpleEmailSender simpleEmailSender @AfterReturning(value=”execution(* uk.co.mysite.datasync.polling.Poller+.doPoll())”, returning=”pusher”) public void afterPoll(Pusher pusher) { simpleEmailSender.send(new PusherEmail(pusher)); } } 这个方面有效(我可以在afterPoll上打一个断点)但是simpleEmailSender是null。 不幸的是,我无法找到有关其原因的明确文档。 (为了记录,我的simpleEmailSender bean存在并正确连接到其他类)以下事情让我困惑: 上下文:组件扫描应该是@Aspect? 如果它肯定是一个弹簧托管bean,那么自动assembly应该工作吗? 如果context:component-scan不是用于创建方面,那么我的方面是如何创建的? 我认为aop:aspectj-autoproxy只是创建一个beanPostProcessor来代理我的@Aspect类? 如果它不是一个Spring托管bean,它会如何做到这一点? 显然你可以告诉我,我不了解事情应该如何从头开始。

在Spring AOP中使用代理

我正在读一本关于在Spring AOP中启用AspectJ支持的书。 以下是从该书中摘录的一段: 要在Spring IoC容器中启用AspectJ注释支持,您只需在bean配置文件中定义一个空的XML元素aop:aspectj-autoproxy。 然后,Spring将自动为您的AspectJ方面匹配的任何bean创建代理。 对于接口在应用程序设计中不可用或未使用的情况,可以依靠CGLIB创建代理。 要启用CGLIB,您需要在设置属性proxy-target-class=true 。 我无法得到第二段。 ‘ 接口不可用 ‘ 是什么意思。 任何人都可以用一个例子说明这一点

如何使用AOP和AspectJ进行日志记录?

我想在我的所有公共方法中添加“trace”消息,如下所示: public void foo(s:String,n:int){// log是一个log4j记录器或任何其他库 log.trace(String.format(“输入foo with s:%s,n:%d”,s,n)) … log.trace(“退出foo”) } 现在我想用AOP(和字节码检测)自动将所有log.trace添加到我的方法中。 我正在考虑AspectJ 。 是否有意义? 你知道任何开源的吗?