Tag: spring aop

如何检测/建议Spring Data(JPA)存储库?

我没有努力建议一个spring data jpa存储库。 目标是检测(围绕)使用自定义注释(在此示例中为ResourceNotFound)注释的特定存储库中的所有非void公共方法,并在返回值为null或空集合时抛出exception。 @Repository @ResourceNotFound @Transactional(readOnly = true) public interface CityRepository extends JpaRepository, JpaSpecificationExecutor { … } 以下建议是连接用@ResourceNotFound注释的接口实现的所有公共方法。 @Pointcut(“within(com.digitalmisfits.spring.aop.annotation.ResourceNotFound *)”) public void beanAnnotatedWithResourceNotFound() {} @Pointcut(“execution(public * *(..))”) public void publicMethod() {} @Around(“beanAnnotatedWithResourceNotFound() && publicMethod()”) public Object publicMethodInsideAClassMarkedWithResourceNotFound(ProceedingJoinPoint pjp) throws Throwable { System.out.println(“publicMethodInsideAClassMarkedWithResourceNotFound ” + pjp.getTarget().toString());; Object retVal = pjp.proceed(); if(((MethodSignature) pjp.getSignature()).getReturnType() != Void.TYPE && […]

Aspectj覆盖方法的参数

我正在开发一个方面来检查setter方法的参数并用空值覆盖空字符串。 到目前为止这是我的州: @Before(“execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)”) public void check(final JoinPoint jp) { LOGGER.debug(jp.getSignature().toLongString()); Object[] args = jp.getArgs(); for (int i = 0; i < args.length; i++) { if (args[i] instanceof String && ((String) args[i]).isEmpty()) { args[i] = null; } } } 不幸的是,覆盖语句args[i] = null; 现在有效! 有谁知道我该怎么覆盖它? 干杯, 凯文

带有AOP拦截器的Spring 3 MVC @Controller?

任何人都知道为什么显然不可能将AOP与带注释的MVC控制器一起使用? (见邮政 )。 我有一个@Controller,一旦我添加切入点就会停止工作。 问题不在于拦截器没有被调用,而是@Controller只是停止工作(在日志中你可以看到,而不是“映射的URL路径[/ xx]到处理器’Yyy’”你得到一个“没有URL”确定的路径“)。 我知道有一种通过handlerMapping向控制器添加拦截器的机制,但我的问题是特定于AOP拦截器。 注释控制器只是在Spring容器中像任何其他pojo一样pojos吗? 有什么不同? 为什么? @Controller @RequestMapping(“/user”) public class RestTestImpl implements RestTest { @RequestMapping(value=”/”, method={RequestMethod.GET}) public @ResponseBody String deleteUsers(String arg) { return “Xxxxx”; } } 在我的servlet-Context中我有: . . . 一切都很好。 但是当我添加: 控制器停止作为控制器(没有错误,只是它停止绑定到指定的URL)!

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

@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,它会如何做到这一点? 显然你可以告诉我,我不了解事情应该如何从头开始。